Usage Examples
OBJECTO
Declaration
import com.cariochi.objecto.Generator;
import com.cariochi.objecto.Instantiator;
import com.cariochi.objecto.Modifier;
import com.cariochi.objecto.model.Issue;
import com.cariochi.objecto.model.Issue.Status;
import com.cariochi.objecto.model.Issue.Type;
import com.cariochi.objecto.model.User;
import java.util.List;
import java.util.Random;
import net.datafaker.Faker;
@WithSettings(maxRecursionDepth = 3)
public interface IssueFactory extends BaseUserGenerators {
@References("subtasks[*].parent")
Issue createIssue();
Issue createIssue(@Modifier("type=?") Type type);
List<Issue> createIssues();
List<Issue> createIssues(@Modifier("type=?") Type type);
@Instantiator
private Attachment<?> newAttachment() {
return Attachment.builder().fileContent(new byte[0]).build();
}
@Generator
private String stringGenerator(Random random) {
return new Faker(random).lorem().sentence();
}
@Generator(type = Issue.class, expression = Issue.Fields.key)
private String issueKeyGenerator(Random random) {
return "ID-" + new Faker(random).number().randomNumber(4, true);
}
@Modifier("key=?")
IssueFactory withKey(String key);
@Modifier("setType(?)")
IssueFactory withType(Type type);
@Modifier("setStatus(?)")
IssueFactory withStatus(Status status);
@Modifier("assignee=?")
IssueFactory withAssignee(User assignee);
@Modifier("subtasks[*].setStatus(?)")
IssueFactory withAllSubtaskStatuses(Status status);
@Modifier("comments[0].commenter=?")
IssueFactory withFirstCommenter(User commenter);
@Modifier("dependencies.put(?, ?)")
IssueFactory withDependency(DependencyType type, Issue issue);
}
import com.cariochi.objecto.Generator;
import com.cariochi.objecto.PostProcessor;
import com.cariochi.objecto.model.User;
import net.datafaker.Faker;
import java.util.Random;
public interface BaseUserGenerators {
@Generator(type = User.class, expression = User.Fields.fullName)
private String fullNameGenerator(Random random) {
return new Faker(random).name().fullName();
}
@Generator(type = User.class, expression = User.Fields.phone)
private String phoneGenerator(Random random) {
return new Faker(random).phoneNumber().cellPhone();
}
@Generator(type = User.class, expression = User.Fields.companyName)
private String companyNameGenerator(Random random) {
return new Faker(random).company().name();
}
@PostProcessor
private void userPostProcessor(User user) {
final String username = user.getFullName().toLowerCase().replace(".", "").replace(" ", ".");
user.setUsername(username);
user.setEmail(username + "@" + new Faker().internet().domainName());
}
}
Usage
// Creating a factory for generating Issue objects
IssueFactory issueFactory = Objecto.create(IssueFactory.class);
// Generating a random Issue object
Issue randomIssue = issueFactory.createIssue();
// Generating an Issue object with specific parameters
Issue randomBug = issueFactory.createIssue(Type.BUG);
// Using modifier methods for easy modification
Issue randomOpenBug = issueFactory
.withType(Type.BUG)
.withStatus(Status.OPEN)
.withAssignee(user)
.withAllSubtaskStatuses(Status.IN_PROGRESS)
.createIssue();
// Generating list of random issues with specific parameters
List<Issue> bugList = issueFactory.createIssues(Type.BUG);
// Using modifier methods
List<Issue> openBugList = issueFactory
.withType(Type.BUG)
.withStatus(Status.OPEN)
.withwithDependency(DependencyType.BLOCK, randomBug)
.createIssues();
Last updated