// Tests for the class Client

import junit.framework.Assert;
import junit.framework.TestCase;

public class ClientTest extends TestCase
{
  
  public void testGetName( )
  {
    Client c = new Client( "Diana", "diana@gmail.ca", "iti1120" );
    
    String expected = "Diana";
    String returned = c.getName();  
    Assert.assertEquals(expected, returned); 
  }
  
  public void testGetEmail( )
  {
    Client c = new Client( "Diana", "diana@gmail.ca", "iti1120" );
    
    String expected = "diana@gmail.ca";
    String returned = c.getEmail();  
    Assert.assertEquals(expected, returned);
  }
  
  public void testSetEmail( )
  {
    Client c = new Client( "Diana", "diana@gmail.ca", "iti1120" );
    
    String expected = "diana@gmail.ca";
    String returned = c.getEmail();  
    Assert.assertEquals(expected, returned);
    
    c.setEmail("diana@hotmail.tv");
    
    expected = "diana@hotmail.tv";
    returned = c.getEmail();  
    Assert.assertEquals(expected, returned);
  }
  
  public void testGetAmountCredited( )
  {
    Client c = new Client( "Diana", "diana@gmail.ca", "iti1120" );
    
    int expected = 10;
    int returned = c.getCredit();
    
    Assert.assertEquals(expected, returned);
  }
  
  public void testVerifyGoodPassword( )
  {
    Client c = new Client( "Diana", "diana@gmail.ca", "iti1120" );
    
    boolean expected = true;
    boolean returned = c.checkPassword("iti1120");
    Assert.assertEquals( expected, returned );  
    
  }
  
  public void testVerifyBadPassword( )
  {
    Client c = new Client( "Diana", "diana@gmail.ca", "iti1120" );
    boolean expected = false;
    boolean returned = c.checkPassword("iti1520");
    Assert.assertEquals( expected, returned );  
  }
  
  public void testChangeGoodPassword( )
  {
    Client c = new Client( "Diana", "diana@gmail.ca", "iti1120" );
    
    boolean expected = true;
    boolean returned = c.checkPassword("iti1120");
    Assert.assertEquals( expected, returned ); 
    
    expected = true;
    returned = c.changePassword("iti1120", "newPassword");
    
    Assert.assertEquals( expected, returned ); 
    
    expected = false;
    returned = c.checkPassword("iti1120");
    Assert.assertEquals( expected, returned ); 
    
    expected = true;
    returned = c.checkPassword("newPassword");
    Assert.assertEquals( expected, returned ); 
  }
  
  public void testChangeBadPassword( )
  {
    Client c = new Client( "Diana", "diana@gmail.ca", "iti1120" );
    
    boolean expected = true;
    boolean returned = c.checkPassword("iti1120");
    Assert.assertEquals( expected, returned ); 
    
    expected = false;
    returned = c.changePassword("iti1520", "newPassword");
    
    Assert.assertEquals( expected, returned ); 
    
    expected = false;
    returned = c.checkPassword("iti1520");
    Assert.assertEquals( expected, returned ); 
    
    expected = false;
    returned = c.checkPassword("newPassword");
    Assert.assertEquals( expected, returned ); 
    
    expected = true;
    returned = c.checkPassword("iti1120");
    Assert.assertEquals( expected, returned ); 
  }
  
  public void testReduceAmountCredited( )
  {
    Client c = new Client( "Diana", "diana@gmail.ca", "iti1120" );
    
    int expected = 10;
    int returned = c.getCredit();  
    Assert.assertEquals(expected, returned);
    
    boolean expectedSuccess = true;
    boolean returnedSuccess = c.reduceAmountCredited(9);
    Assert.assertEquals(expectedSuccess, returnedSuccess);
    
    expected = 1;
    returned = c.getCredit();  
    Assert.assertEquals(expected, returned);
    
    expectedSuccess = false;
    returnedSuccess = c.reduceAmountCredited(2);
    Assert.assertEquals(expectedSuccess, returnedSuccess);
    
    expected = 1;
    returned = c.getCredit();  
    Assert.assertEquals(expected, returned);
  }
  
}
