// Copyright 2017 The Nomulus Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package google.registry.tools;

import com.beust.jcommander.ParameterException;
import org.junit.Test;

/** Unit tests for {@link DeleteDomainCommand}. */
public class DeleteDomainCommandTest extends EppToolCommandTestCase<DeleteDomainCommand> {

  @Test
  public void testSuccess() throws Exception {
    runCommand("--client=NewRegistrar", "--domain_name=example.tld", "--force",
        "--reason=Test");
    eppVerifier().verifySent("domain_delete.xml");
  }

  @Test
  public void testSuccess_multipleWordReason() throws Exception {
    runCommand("--client=NewRegistrar", "--domain_name=example.tld", "--force",
        "--reason=\"Test test\"");
    eppVerifier().verifySent("domain_delete_multiple_word_reason.xml");
  }

  @Test
  public void testSuccess_requestedByRegistrarFalse() throws Exception {
    runCommand("--client=NewRegistrar", "--domain_name=example.tld", "--force",
        "--reason=Test", "--registrar_request=false");
    eppVerifier().verifySent("domain_delete.xml");
  }

  @Test
  public void testSuccess_requestedByRegistrarTrue() throws Exception {
    runCommand("--client=NewRegistrar", "--domain_name=example.tld", "--force",
        "--reason=Test", "--registrar_request=true");
    eppVerifier().verifySent("domain_delete_by_registrar.xml");
  }

  @Test
  public void testFailure_noReason() throws Exception {
    thrown.expect(ParameterException.class);
    runCommand("--client=NewRegistrar", "--domain_name=example.tld", "--force");
  }

  @Test
  public void testFailure_missingClientId() throws Exception {
    thrown.expect(ParameterException.class);
    runCommand("--domain_name=example.tld", "--force", "--reason=Test");
  }

  @Test
  public void testFailure_missingDomainName() throws Exception {
    thrown.expect(ParameterException.class);
    runCommand("--client=NewRegistrar", "--force", "--reason=Test");
  }

  @Test
  public void testFailure_unknownFlag() throws Exception {
    thrown.expect(ParameterException.class);
    runCommand("--client=NewRegistrar", "--domain_name=example.tld",
        "--force", "--reason=Test", "--foo");
  }

  @Test
  public void testFailure_mainParameter() throws Exception {
    thrown.expect(ParameterException.class);
    runCommand("--client=NewRegistrar", "--domain_name=example.tld",
        "--force", "--reason=Test", "foo");
  }
}

@@ -989,32 +989,24 @@
 , %22--force%22,
-%0A       
  %22--reason=T
@@ -1149,32 +1149,41 @@
 %0A    runCommand(
+%0A        
 %22--client=NewReg
@@ -1226,32 +1226,24 @@
 , %22--force%22,
-%0A       
  %22--reason=%5C
@@ -1423,32 +1423,41 @@
 %0A    runCommand(
+%0A        
 %22--client=NewReg
@@ -1456,32 +1456,40 @@
 t=NewRegistrar%22,
+%0A       
  %22--domain_name=
@@ -1493,32 +1493,40 @@
 me=example.tld%22,
+%0A       
  %22--force%22,%0A    
@@ -1537,32 +1537,40 @@
 %22--reason=Test%22,
+%0A       
  %22--registrar_re
@@ -1727,32 +1727,41 @@
 %0A    runCommand(
+%0A        
 %22--client=NewReg
@@ -1760,32 +1760,40 @@
 t=NewRegistrar%22,
+%0A       
  %22--domain_name=
@@ -1797,32 +1797,40 @@
 me=example.tld%22,
+%0A       
  %22--force%22,%0A    
@@ -1845,24 +1845,32 @@
 eason=Test%22,
+%0A       
  %22--registra
@@ -2656,32 +2656,41 @@
 %0A    runCommand(
+%0A        
 %22--client=NewReg
@@ -2722,32 +2722,24 @@
 xample.tld%22,
-%0A       
  %22--force%22, 
@@ -2891,32 +2891,41 @@
 %0A    runCommand(
+%0A        
 %22--client=NewReg
@@ -2957,32 +2957,24 @@
 xample.tld%22,
-%0A       
  %22--force%22, 

Fix formatting of DeleteDomainCommand