package oving5.named;

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class Person2Test {

	private Person2 person;
	private String given;
	private String family;

	@BeforeEach
	public void setUp() {
		given = "Hallvard";
		family = "Trætteberg";
		person = new Person2(String.format("%s %s", given, family));
	}

	private static void testName(Person2 person, String givenName, String familyName) {
		assertEquals(givenName, person.getGivenName());
		assertEquals(familyName, person.getFamilyName());
		assertEquals(String.format("%s %s", givenName, familyName), person.getFullName());
	}

	@Test
	@DisplayName("Check that the constructor assigns the correct name to the person")
	public void testConstructor() {
		Person2Test.testName(person, given, family);
	}

	@Test
	@DisplayName("Check that setGivenName() assigns the correct name")
	public void testSetGivenName() {
		String newGiven = "Jens";
		person.setGivenName(newGiven);
		Person2Test.testName(person, newGiven, family);
	}

	@Test
	@DisplayName("Check that setFamilyName() assigns the correct name")
	public void testSetFamilyName() {
		String newFamily = "Olsen";
		person.setFamilyName(newFamily);
		Person2Test.testName(person, given, newFamily);
	}

	@Test
	@DisplayName("Check that setFullName() assigns the correct name")
	public void testSetFullName() {
		String newGiven = "Lisa";
		String newFamily = "Eriksen";
		String newFull = String.format("%s %s", newGiven, newFamily);
		person.setFullName(newFull);
		Person2Test.testName(person, newGiven, newFamily);
	}
}
