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