// Path: src/test/java/model/Address.java
// public class Address {
// 	private String country;
// 	private String street;
// 	private String city;
// 
// 	public String getCountry() {
// 		return country;
// 	}
// 
// 	public void setCountry(String country) {
// 		this.country = country;
// 	}
// 
// 	public String getCity() {
// 		return city;
// 	}
// 
// 	public void setCity(String city) {
// 		this.city = city;
// 	}
// 
// 	public String getStreet() {
// 		return street;
// 	}
// 
// 	public void setStreet(String street) {
// 		this.street = street;
// 	}
// }
// 
// Path: src/test/java/model/Role.java
// public enum Role {
// 	ADMIN, USER
// }
// 
// Path: src/test/java/model/User.java
// public class User {
// 	private long id;
// 	private String name;
// 	private String lastName;
// 	private Role role;
// 
// 	public long getId() {
// 		return id;
// 	}
// 
// 	public void setId(long id) {
// 		this.id = id;
// 	}
// 
// 	private Address addr;
// 
// 	public Role getRole() {
// 		return role;
// 	}
// 
// 	public void setRole(Role role) {
// 		this.role = role;
// 	}
// 
// 	public void setAddr(Address addr) {
// 		this.addr = addr;
// 	}
// 
// 	public void setLastName(String lastName) {
// 		this.lastName = lastName;
// 	}
// 
// 	public void setName(String name) {
// 		this.name = name;
// 	}
// 
// 	public Address getAddr() {
// 		return addr;
// 	}
// 
// 	public String getLastName() {
// 		return lastName;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// }


import org.assertj.core.groups.Tuple;
import org.junit.Before;
import org.junit.Test;
import model.Address;
import model.Role;
import model.User;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;

		verify(mock, times(2)).afterCall();
		verifyNoMoreInteractions(mock);
	}

	@Test
	public void repeat_2_users_as_set() {
		assertThat(FactoryDuke.build(User.class).times(2).toSet())
				.hasSize(2)
				.extracting(User::getName, User::getLastName)
				.containsExactly(Tuple.tuple("Malcom", "Scott"), Tuple.tuple("Malcom", "Scott"));

		verify(mock, times(2)).afterCall();
		verifyNoMoreInteractions(mock);
	}

	@Test
	public void repeat_2_users_with_identifier() {
		assertThat(FactoryDuke.build(User.class, "user_with_fr_address").times(2).toList())
				.hasSize(2)
				.extracting(User::getName, User::getLastName, u -> u.getAddr().getCity())
				.containsExactly(Tuple.tuple("Malcom", "Scott", "Paris"), Tuple.tuple("Malcom", "Scott", "Paris"));

		verify(mock, times(6)).afterCall();
		verifyNoMoreInteractions(mock);
	}

	@Test
	public void repeat_2_users_with_override() {
		assertThat(FactoryDuke.build(User.class, u -> {
// Path: src/test/java/model/Address.java
// public class Address {
// 	private String country;
// 	private String street;
// 	private String city;
// 
// 	public String getCountry() {
// 		return country;
// 	}
// 
// 	public void setCountry(String country) {
// 		this.country = country;
// 	}
// 
// 	public String getCity() {
// 		return city;
// 	}
// 
// 	public void setCity(String city) {
// 		this.city = city;
// 	}
// 
// 	public String getStreet() {
// 		return street;
// 	}
// 
// 	public void setStreet(String street) {
// 		this.street = street;
// 	}
// }
// 
// Path: src/test/java/model/Role.java
// public enum Role {
// 	ADMIN, USER
// }
// 
// Path: src/test/java/model/User.java
// public class User {
// 	private long id;
// 	private String name;
// 	private String lastName;
// 	private Role role;
// 
// 	public long getId() {
// 		return id;
// 	}
// 
// 	public void setId(long id) {
// 		this.id = id;
// 	}
// 
// 	private Address addr;
// 
// 	public Role getRole() {
// 		return role;
// 	}
// 
// 	public void setRole(Role role) {
// 		this.role = role;
// 	}
// 
// 	public void setAddr(Address addr) {
// 		this.addr = addr;
// 	}
// 
// 	public void setLastName(String lastName) {
// 		this.lastName = lastName;
// 	}
// 
// 	public void setName(String name) {
// 		this.name = name;
// 	}
// 
// 	public Address getAddr() {
// 		return addr;
// 	}
// 
// 	public String getLastName() {
// 		return lastName;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// }


// Path: src/test/java/factoryduke/FactoryDukeTest.java
import org.assertj.core.groups.Tuple;
import org.junit.Before;
import org.junit.Test;
import model.Address;
import model.Role;
import model.User;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;


		verify(mock, times(2)).afterCall();
		verifyNoMoreInteractions(mock);
	}

	@Test
	public void repeat_2_users_as_set() {
		assertThat(FactoryDuke.build(User.class).times(2).toSet())
				.hasSize(2)
				.extracting(User::getName, User::getLastName)
				.containsExactly(Tuple.tuple("Malcom", "Scott"), Tuple.tuple("Malcom", "Scott"));

		verify(mock, times(2)).afterCall();
		verifyNoMoreInteractions(mock);
	}

	@Test
	public void repeat_2_users_with_identifier() {
		assertThat(FactoryDuke.build(User.class, "user_with_fr_address").times(2).toList())
				.hasSize(2)
				.extracting(User::getName, User::getLastName, u -> u.getAddr().getCity())
				.containsExactly(Tuple.tuple("Malcom", "Scott", "Paris"), Tuple.tuple("Malcom", "Scott", "Paris"));

		verify(mock, times(6)).afterCall();
		verifyNoMoreInteractions(mock);
	}

	@Test
	public void repeat_2_users_with_override() {
		assertThat(FactoryDuke.build(User.class, u -> {
			u.setRole(Role.USER);