package scrum; import ilarkesto.base.Str; import ilarkesto.base.Sys; import ilarkesto.base.Utl; import ilarkesto.base.time.Date; import ilarkesto.base.time.DateAndTime; import ilarkesto.base.time.Time; import ilarkesto.core.logging.Log; import ilarkesto.persistence.AEntity; import scrum.server.ScrumWebApplication; import scrum.server.admin.User; import scrum.server.calendar.SimpleEvent; import scrum.server.collaboration.Comment; import scrum.server.collaboration.Wikipage; import scrum.server.impediments.Impediment; import scrum.server.issues.Issue; import scrum.server.pr.BlogEntry; import scrum.server.project.Project; import scrum.server.project.Requirement; import scrum.server.risks.Risk; import scrum.server.sprint.Sprint; import scrum.server.sprint.Task; public class TestUtil { private static boolean initialized; private static ScrumWebApplication app; public static void initialize() { if (initialized) return; initialized = true; Log.setDebugEnabled(false); Sys.setHeadless(true); app = new ScrumWebApplication(); app.setTestMode(true); app.start(); } public static User getDuke() { initialize(); User duke = app.getUserDao().getUserByName("duke"); if (duke == null) duke = app.getUserDao().postUserWithDefaultPassword("duke"); duke.setEmail("duke@kunagi.org"); duke.setEmailVerified(true); return duke; } public static User getAdmin() { initialize(); User admin = app.getUserDao().getUserByName("admin"); if (admin == null) { admin = app.getUserDao().postUserWithDefaultPassword("admin"); admin.setAdmin(true); } return admin; } public static void createComments(AEntity parent, int count) { for (int i = 0; i < count; i++) { createComment(parent); } } public static Comment createComment(AEntity parent) { return createComment(parent, DateAndTime.now().addHours(Utl.randomInt(-100000, -1)), Str.generateRandomSentence(1, 2), Str.generateRandomParagraph(), true); } public static Comment createComment(AEntity parent, DateAndTime dateAndTime, String author, String text, boolean published) { Comment comment = app.getCommentDao().newEntityInstance(); comment.setParent(parent); comment.setDateAndTime(dateAndTime); comment.setAuthorName(author); comment.setText(text); comment.setPublished(published); return comment; } public static Task createTask(Requirement requirement, int number, int work) { return createTask(requirement, number, Str.generateRandomSentence(2, 6), work); } public static Task createTask(Requirement requirement, int number, String label, int work) { Task task = app.getTaskDao().newEntityInstance(); task.setRequirement(requirement); task.setNumber(number); task.setLabel(label); task.setRemainingWork(work); return task; } public static User createUser(String name) { User user = app.getUserDao().newEntityInstance(); user.setName(name); return user; } public static Issue createIssue(Project project, int number) { return createIssue(project, number, Str.generateRandomSentence(4, 8), Str.generateRandomParagraph(), Str.generateRandomParagraph(), true); } public static Issue createIssue(Project project, int number, String label, String description, String statement, boolean published) { Issue issue = app.getIssueDao().newEntityInstance(); issue.setProject(project); issue.setNumber(number); issue.setLabel(label); issue.setDescription(description); issue.setStatement(statement); issue.setPublished(published); return issue; } public static Wikipage createWikipage(Project project, String name) { String text = "== " + name + " =="; text += "\n\n" + Str.generateRandomParagraph(); text += "\n\n" + "* " + name + "\n* " + name; text += "\n\n" + Str.generateRandomParagraph(); return createWikipage(project, name, text); } public static Wikipage createWikipage(Project project, String name, String text) { Wikipage wikipage = app.getWikipageDao().newEntityInstance(); wikipage.setProject(project); wikipage.setName(name); wikipage.setText(text); return wikipage; } public static SimpleEvent createSimpleEvent(Project project, int number) { return createSimpleEvent(project, Date.inDays(number), "Event #" + number, "Location #" + number, "Note for Event #" + number); } public static SimpleEvent createSimpleEvent(Project project, Date date, String label, String location, String note) { SimpleEvent event = app.getSimpleEventDao().newEntityInstance(); event.setProject(project); event.setDate(date); event.setLabel(label); event.setLocation(location); event.setNote(note); return event; } public static Risk createRisk(Project project, int number) { return createRisk(project, number, "Risk #" + number, "Risk #" + number + " description"); } public static Risk createRisk(Project project, int number, String label, String description) { Risk risk = app.getRiskDao().newEntityInstance(); risk.setProject(project); risk.setNumber(number); risk.setLabel(label); risk.setDescription(description); risk.setImpact(number); risk.setProbability(number); return risk; } public static Impediment createImpediment(Project project, int number) { return createImpediment(project, Date.beforeDays(number), number, "Impediment #" + number, "Impediment #" + number + " description."); } public static Impediment createImpediment(Project project, Date date, int number, String label, String description) { Impediment impediment = app.getImpedimentDao().newEntityInstance(); impediment.setProject(project); impediment.setDate(date); impediment.setNumber(number); impediment.setLabel(label); impediment.setDescription(description); return impediment; } public static BlogEntry createBlogEntry(Project project, int number) { DateAndTime date = new DateAndTime(Date.beforeDays(number * 5), Time.now()); return createBlogEntry(project, number, Str.generateRandomSentence(4, 6), Str.generateRandomParagraph(), date); } public static BlogEntry createBlogEntry(Project project, int number, String title, String text, DateAndTime dateAndTime) { BlogEntry entry = app.getBlogEntryDao().newEntityInstance(); entry.setProject(project); entry.setNumber(number); entry.setTitle(title); entry.setText(text); entry.setDateAndTime(dateAndTime); return entry; } public static Requirement createRequirement(Project project, int number) { return createRequirement(project, number, Str.generateRandomSentence(4, 5) + " (#" + number + ")", Str.generateRandomParagraph(), Str.generateRandomParagraph()); } public static Requirement createRequirement(Project project, int number, String label, String description, String testDescription) { Requirement requirement = app.getRequirementDao().newEntityInstance(); requirement.setProject(project); requirement.setNumber(number); requirement.setLabel(label); requirement.setDescription(description); requirement.setTestDescription(testDescription); return requirement; } public static Sprint createSprint(Project project, Date end) { return createSprint(project, end.beforeDays(30), end); } public static Sprint createSprint(Project project, Date begin, Date end) { Sprint sprint = app.getSprintDao().newEntityInstance(); sprint.setProject(project); sprint.setBegin(begin); sprint.setEnd(end); sprint.setLabel("Sprint from " + begin + " to " + end); sprint.setGoal("Sprint from " + begin + " to " + end); return sprint; } public static Project createProject() { return createProject(getDuke()); } public static Project createProject(User admin) { return createProject(admin, Str.generateRandomWord(5, 10, true)); } public static Project createProject(User admin, String label) { Project project = app.getProjectDao().postProject(admin); project.setLabel(label); project.setShortDescription(Str.generateRandomSentence(4, 4)); project.setDescription(Str.generateRandomParagraph()); project.setLongDescription(Str.generateRandomParagraphs(5, null, null, "\n\n")); return project; } public static ScrumWebApplication getApp() { return app; } }