import static org.junit.jupiter.api.Assertions.*;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.ArrayList;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

class UserGroupTest {

	@Test
	@DisplayName("Test User and getter methods")
	void test() {
		User user = new User("aj", "user", "Alice Jones");
		assertEquals(user.getUsername(), "aj");
		assertEquals(user.getUserType(), "user");
		assertEquals(user.getName(), "Alice Jones");
	}
	
	@Test
	@DisplayName("Test the sample data")
	void testSampleData() {
		UserGroup users = new UserGroup();
		users.addSampleData();
		ArrayList<User> allUsers = users.getUsers();
		assertEquals(allUsers.size(), 10, "Testing size of sample data is correct");
	}
	
	@Test
	void testGetUser() {
		UserGroup users = new UserGroup();
				
	    String[] people = {"Kevin Rowe", "Jack Daniels", "Barry Smith", "Hugh Davies", "Pete Jackson", "Jerry Simpson", "Teresa Szelankovic", "Brian Degrasse Tyson", "Mike Hardcastle", "Danny Hanson"};
	    for (int i=0; i<10; i++) {
	      users.getUsers().add(new User(Integer.toString(i), "user", people[i]));
	    }
		
		assertEquals(users.getUser(2).getName(), "Barry Smith", "Testing that the name is Barry Smith");
		
		String[] args = null;
	    ByteArrayOutputStream baos = new ByteArrayOutputStream();
	    PrintStream ps = new PrintStream(baos);
	    PrintStream old = System.out;
	    System.setOut(ps);
	    users.printUsernames();
	    System.out.flush();
	    System.setOut(old);
	    
	    String output = baos.toString().replaceAll("\n", " ");
		
	    String expected = "0 user 1 user 2 user 3 user 4 user 5 user 6 user 7 user 8 user 9 user ";
	    		
	    assertEquals(output, expected, "Testing printUsernane method");
		
		
	}

}
