/* documentr - Edit, maintain, and present software documentation on the web. Copyright (C) 2012-2013 Maik Schreiber This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.blizzy.documentr; import static org.mockito.Matchers.*; import java.util.EnumSet; import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.EqualsBuilder; import org.hamcrest.Matcher; import org.mockito.ArgumentMatcher; import org.mockito.Matchers; import org.mockito.internal.matchers.Equals; import org.mockito.internal.matchers.Not; import de.blizzy.documentr.access.OpenId; import de.blizzy.documentr.access.Permission; import de.blizzy.documentr.access.Role; import de.blizzy.documentr.access.User; import de.blizzy.documentr.page.Page; import de.blizzy.documentr.page.PageTextData; import de.blizzy.documentr.web.access.RoleForm; import de.blizzy.documentr.web.access.UserForm; import de.blizzy.documentr.web.branch.BranchForm; import de.blizzy.documentr.web.macro.MacroForm; import de.blizzy.documentr.web.page.PageForm; import de.blizzy.documentr.web.project.ProjectForm; public final class DocumentrMatchers { public static final String ANY = DocumentrMatchers.class.getName() + "_ANY"; //$NON-NLS-1$ private DocumentrMatchers() {} public static Page argPage(String title, String text) { return argPage(ANY, title, text, ANY); } public static Page argPage(final String parentPagePath, final String title, final String text, final String viewRestrictionRole) { Matcher<Page> matcher = new ArgumentMatcher<Page>() { @Override public boolean matches(Object argument) { Page page = (Page) argument; String pageText = null; if (page.getData() instanceof PageTextData) { pageText = ((PageTextData) page.getData()).getText(); } return (StringUtils.equals(parentPagePath, ANY) || StringUtils.equals(page.getParentPagePath(), parentPagePath)) && StringUtils.equals(page.getTitle(), title) && StringUtils.equals(pageText, text) && (StringUtils.equals(viewRestrictionRole, ANY) || StringUtils.equals(page.getViewRestrictionRole(), viewRestrictionRole)); } }; return argThat(matcher); } public static PageForm argPageForm(final String projectName, final String branchName, final String path, final String parentPagePath, final String title, final String text, final String commit) { Matcher<PageForm> matcher = new ArgumentMatcher<PageForm>() { @Override public boolean matches(Object argument) { PageForm form = (PageForm) argument; return StringUtils.equals(form.getProjectName(), projectName) && StringUtils.equals(form.getBranchName(), branchName) && StringUtils.equals(form.getPath(), path) && StringUtils.equals(form.getParentPagePath(), parentPagePath) && StringUtils.equals(form.getTitle(), title) && StringUtils.equals(form.getText(), text) && StringUtils.equals(form.getCommit(), commit); } }; return argThat(matcher); } public static User argUser(final String loginName, final String password, final String email, final boolean disabled) { Matcher<User> matcher = new ArgumentMatcher<User>() { @Override public boolean matches(Object argument) { User user = (User) argument; return StringUtils.equals(user.getLoginName(), loginName) && StringUtils.equals(user.getPassword(), password) && StringUtils.equals(user.getEmail(), email) && (user.isDisabled() == disabled); } }; return argThat(matcher); } public static User argUser(final String loginName, final String password, final String email, final boolean disabled, final Set<OpenId> openIds) { Matcher<User> matcher = new ArgumentMatcher<User>() { @Override public boolean matches(Object argument) { User user = (User) argument; return StringUtils.equals(user.getLoginName(), loginName) && StringUtils.equals(user.getPassword(), password) && StringUtils.equals(user.getEmail(), email) && (user.isDisabled() == disabled) && (user.getOpenIds().equals(openIds)); } }; return argThat(matcher); } public static UserForm argUserForm(final String loginName, final String password1, final String password2, final boolean disabled) { Matcher<UserForm> matcher = new ArgumentMatcher<UserForm>() { @Override public boolean matches(Object argument) { UserForm form = (UserForm) argument; return StringUtils.equals(form.getLoginName(), loginName) && StringUtils.equals(form.getPassword1(), password1) && StringUtils.equals(form.getPassword2(), password2) && (form.isDisabled() == disabled); } }; return argThat(matcher); } public static BranchForm argBranchForm(final String projectName, final String name, final String startingBranch) { Matcher<BranchForm> matcher = new ArgumentMatcher<BranchForm>() { @Override public boolean matches(Object argument) { BranchForm form = (BranchForm) argument; return StringUtils.equals(form.getProjectName(), projectName) && StringUtils.equals(form.getName(), name) && StringUtils.equals(form.getStartingBranch(), startingBranch); } }; return argThat(matcher); } public static ProjectForm argProjectForm(final String name) { Matcher<ProjectForm> matcher = new ArgumentMatcher<ProjectForm>() { @Override public boolean matches(Object argument) { ProjectForm form = (ProjectForm) argument; return StringUtils.equals(form.getName(), name); } }; return argThat(matcher); } public static RoleForm argRoleForm(final String name, final Set<String> permissions) { Matcher<RoleForm> matcher = new ArgumentMatcher<RoleForm>() { @Override public boolean matches(Object argument) { RoleForm form = (RoleForm) argument; return StringUtils.equals(form.getName(), name) && form.getPermissions().equals(permissions); } }; return argThat(matcher); } public static Role argRole(final String name, final EnumSet<Permission> permissions) { Matcher<Role> matcher = new ArgumentMatcher<Role>() { @Override public boolean matches(Object argument) { Role role = (Role) argument; return StringUtils.equals(role.getName(), name) && role.getPermissions().equals(permissions); } }; return argThat(matcher); } @SuppressWarnings("unchecked") public static String notEq(String s) { return Matchers.<String>argThat(new Not(new Equals(s))); } public static MacroForm argMacroForm(final String name, final String code) { Matcher<MacroForm> matcher = new ArgumentMatcher<MacroForm>() { @Override public boolean matches(Object argument) { MacroForm form = (MacroForm) argument; return StringUtils.equals(form.getName(), name) && StringUtils.equals(form.getCode(), code); } }; return argThat(matcher); } public static <T> T eqReflection(final T expected) { Matcher<T> matcher = new ArgumentMatcher<T>() { @Override public boolean matches(Object argument) { return EqualsBuilder.reflectionEquals(expected, argument); } }; return argThat(matcher); } }