package jrequest.test;

import junit.framework.TestCase;
import jrequest.base.*;



/**
 * Tests of the classes in the jrequest.base package.
 * @author daaby
 */

public class RequestTest extends TestCase {
	
    private static Request request;
    private static User oliver = new User("Oliver");
    private static int no = 0;
	
    public void setUp() throws Exception {
        super.setUp();
    	no++;
    	request = new Request();
    	request.addDescription("Test " + no);
    }
    
    public void tearDown() throws Exception {
        super.tearDown();
    	request = null;
    }
    
    public void testCreateRequest() {
    	assertFalse(request.isClosed());
    }
    
    public void testAcceptRequest() {
    	assertFalse(request.isAccepted());
    	request.accept();
    	assertTrue(request.isAccepted());
    }
    
    public void testAssignRequest() {
    	try {
    	    request.assignTo(oliver);
    	    fail("not allowed to call assignTo() here");
    	} catch (RuntimeException ignored) {}
    	request.accept();
    	assertFalse(request.isAssigned());
    	request.assignTo(oliver);
    	assertTrue(request.isAssigned());
    }
    
    public void testReassignRequest() {
        request.accept();
        request.assignTo(oliver);
        request.reassignTo(new User("Rambo"));
        assertTrue(request.isAssigned());
    }
    
    public void testDescription() {
    	assertEquals("Test " + no, request.getDescription());
    	request.addDescription("hello");
    	assertEquals("Test " + no + "hello",
    	                  request.getDescription());
    }
    
    public void testCloseRequest() {
        request.accept();
        request.assignTo(oliver);
        request.close();
        assertTrue(request.isClosed());
    }
    
    public void testRejectRequestInStateOpen() {
        request.reject();
        assertTrue(request.isRejected());
        try {
            request.accept();
            fail("rejected request can't be accepted!");
        } catch (RuntimeException expected) {}
    }
    
    public void testRejectRequestInStateClosed() {
        this.testCloseRequest();
        try {
            request.reject();
            fail("closed request can't be rejected!");
        } catch (RuntimeException expected) {}
    }
    
    public void testToString() {
        assertNotNull(request.toString());
    }

    public static void main(String[] args) {
        junit.swingui.TestRunner.run(RequestTest.class);
    }
}
