/* * The MIT License * * Copyright (c) <2012> <Bruno P. Kinoshita> * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package jenkins.plugins.testopia; import hudson.EnvVars; import java.util.HashMap; import java.util.Map; import jenkins.plugins.testopia.result.TestCaseWrapper; import jenkins.plugins.testopia.util.Messages; import org.mozilla.testopia.model.Status; import org.mozilla.testopia.model.TestRun; /** * Utility methods. * @author Bruno P. Kinoshita - http://www.kinoshita.eti.br * @since 0.1 */ public class Utils { // Empty constructor, as this is an util class. private Utils() {}; // Environment Variables names. private static final String TESTOPIA_TESTCASE_ID_ENVVAR = "TESTOPIA_TESTCASE_ID"; private static final String TESTOPIA_TESTCASE_RUN_ID_ENVVAR = "TESTOPIA_TESTCASE_RUN_ID"; private static final String TESTOPIA_TESTCASE_BUILD_ID_ENVVAR = "TESTOPIA_TESTCASE_BUILD_ID"; private static final String TESTOPIA_TESTCASE_SCRIPT_ENVVAR = "TESTOPIA_TESTCASE_SCRIPT"; private static final String TESTOPIA_TESTCASE_ALIAS_ENVVAR = "TESTOPIA_TESTCASE_ALIAS"; private static final String TESTOPIA_TESTCASE_ARGUMENTS_ENVVAR = "TESTOPIA_TESTCASE_ARGUMENTS"; private static final String TESTOPIA_TESTCASE_REQUIREMENT_ENVVAR = "TESTOPIA_TESTCASE_REQUIREMENT"; private static final String TESTOPIA_TESTCASE_SORT_KEY_ENVVAR = "TESTOPIA_TESTCASE_SORT_KEY"; private static final String TESTOPIA_TESTCASE_SUMMARY_ENVVAR = "TESTOPIA_TESTCASE_SUMMARY"; private static final String TESTOPIA_TESTCASE_AUTHOR_ID_ENVVAR = "TESTOPIA_TESTCASE_AUTHOR_ID"; private static final String TESTOPIA_TESTCASE_CATEGORY_ID_ENVVAR = "TESTOPIA_TESTCASE_CATEGORY_ID"; private static final String TESTOPIA_TESTCASE_DEFAULT_TESTER_ID_ENVVAR = "TESTOPIA_TESTCASE_DEFAULT_TESTER_ID"; private static final String TESTOPIA_TESTCASE_PRIORITY_ID_ENVVAR = "TESTOPIA_TESTCASE_PRIORITY_ID"; private static final String TESTOPIA_TESTCASE_STATUS_ID_ENVVAR = "TESTOPIA_TESTCASE_STATUS_ID"; private static final String TESTOPIA_TESTCASE_AUTOMATED_ENVVAR = "TESTOPIA_TESTCASE_AUTOMATED"; private static final String TESTOPIA_TESTCASE_CREATION_DATE_ENVVAR = "TESTOPIA_TESTCASE_CREATION_DATE"; private static final String TESTOPIA_TESTCASE_ESTIMATED_TIME_ENVVAR = "TESTOPIA_TESTCASE_ESTIMATED_TIME"; private static final String TESTOPIA_TESTCASE_ENV_ID_ENVVAR = "TESTOPIA_TESTCASE_ENV_ID"; /* --- */ private static final String TESTOPIA_TESTRUN_ID_ENVVAR = "TESTOPIA_TESTRUN_ID"; private static final String TESTOPIA_TESTRUN_BUILD_ENVVAR = "TESTOPIA_TESTRUN_BUILD"; private static final String TESTOPIA_TESTRUN_ENVIRONMENT_ENVVAR = "TESTOPIA_TESTRUN_ENVIRONMENT"; private static final String TESTOPIA_TESTRUN_MANAGER_ENVVAR = "TESTOPIA_TESTRUN_MANAGER"; private static final String TESTOPIA_TESTRUN_NOTES_ENVVAR = "TESTOPIA_TESTRUN_NOTES"; private static final String TESTOPIA_TESTRUN_PRODUCT_VERSION_ENVVAR = "TESTOPIA_TESTRUN_PRODUCT_VERSION"; private static final String TESTOPIA_TESTRUN_SUMMARY_ENVVAR = "TESTOPIA_TESTRUN_SUMMARY"; private static final String TESTOPIA_TESTRUN_CASES_ENVVAR = "TESTOPIA_TESTRUN_CASES"; private static final String TESTOPIA_TESTRUN_PLAN_ID_ENVVAR = "TESTOPIA_TESTRUN_PLAN_ID"; private static final String TESTOPIA_TESTRUN_PLAN_TEXT_VERSION_ENVVAR = "TESTOPIA_TESTRUN_PLAN_TEXT_VERSION"; private static final String TESTOPIA_TESTRUN_STATUS_ENVVAR = "TESTOPIA_TESTRUN_STATUS"; private static final String TESTOPIA_TESTRUN_TARGET_COMPLETION_ENVVAR = "TESTOPIA_TESTRUN_TARGET_COMPLETION"; private static final String TESTOPIA_TESTRUN_PLAN_TARGET_PASS_ENVVAR = "TESTOPIA_TESTRUN_PLAN_TARGET_PASS"; /** * Creates EnvVars for a Test Case. * @param testCase test Case * @return EnvVars (environment variables) */ public static EnvVars buildTestCaseEnvVars(TestCaseWrapper testCase) { // Build environment variables list Map<String, String> envVars = createEnvironmentVariables(testCase); final EnvVars buildEnvironment = new EnvVars(envVars); return buildEnvironment; } /** * Creates a Map (name, value) of environment variables for a Test Case. * @param testCase test Case. * @return Map (name, value) of environment variables. */ public static Map<String, String> createEnvironmentVariables(TestCaseWrapper testCase) { Map<String, String> envVar = new HashMap<String, String>(); envVar.put(TESTOPIA_TESTCASE_ID_ENVVAR, ""+testCase.getId() ); envVar.put(TESTOPIA_TESTCASE_SCRIPT_ENVVAR, ""+testCase.getScript()); envVar.put(TESTOPIA_TESTCASE_ALIAS_ENVVAR, ""+testCase.getAlias()); envVar.put(TESTOPIA_TESTCASE_ARGUMENTS_ENVVAR, ""+testCase.getArguments()); envVar.put(TESTOPIA_TESTCASE_REQUIREMENT_ENVVAR, ""+testCase.getRequirement()); envVar.put(TESTOPIA_TESTCASE_SORT_KEY_ENVVAR, ""+testCase.getSortKey()); envVar.put(TESTOPIA_TESTCASE_SUMMARY_ENVVAR, ""+testCase.getSummary()); envVar.put(TESTOPIA_TESTCASE_AUTHOR_ID_ENVVAR, ""+testCase.getAuthorId()); envVar.put(TESTOPIA_TESTCASE_CATEGORY_ID_ENVVAR, ""+testCase.getCategoryId()); envVar.put(TESTOPIA_TESTCASE_DEFAULT_TESTER_ID_ENVVAR, ""+testCase.getDefaultTesterId()); envVar.put(TESTOPIA_TESTCASE_PRIORITY_ID_ENVVAR, ""+testCase.getPriorityId()); envVar.put(TESTOPIA_TESTCASE_STATUS_ID_ENVVAR, ""+testCase.getStatusId()); envVar.put(TESTOPIA_TESTCASE_AUTOMATED_ENVVAR, ""+testCase.getAutomated()); envVar.put(TESTOPIA_TESTCASE_CREATION_DATE_ENVVAR, ""+testCase.getCreationDate()); envVar.put(TESTOPIA_TESTCASE_ESTIMATED_TIME_ENVVAR, ""+testCase.getEstimatedTime()); envVar.put(TESTOPIA_TESTCASE_RUN_ID_ENVVAR, ""+testCase.getRunId()); envVar.put(TESTOPIA_TESTCASE_BUILD_ID_ENVVAR, ""+testCase.getBuildId()); envVar.put(TESTOPIA_TESTCASE_ENV_ID_ENVVAR, ""+testCase.getEnvId()); TestRun testRun = testCase.getTestRun(); envVar.put(TESTOPIA_TESTRUN_ID_ENVVAR, ""+testRun.getId()); envVar.put(TESTOPIA_TESTRUN_BUILD_ENVVAR, ""+testRun.getBuild()); envVar.put(TESTOPIA_TESTRUN_ENVIRONMENT_ENVVAR, ""+testRun.getEnvironment()); envVar.put(TESTOPIA_TESTRUN_MANAGER_ENVVAR, ""+testRun.getManager()); envVar.put(TESTOPIA_TESTRUN_NOTES_ENVVAR, ""+testRun.getNotes()); envVar.put(TESTOPIA_TESTRUN_PRODUCT_VERSION_ENVVAR, ""+testRun.getProductVersion()); envVar.put(TESTOPIA_TESTRUN_SUMMARY_ENVVAR, ""+testRun.getSummary()); envVar.put(TESTOPIA_TESTRUN_CASES_ENVVAR, ""+testRun.getCases()); envVar.put(TESTOPIA_TESTRUN_PLAN_ID_ENVVAR, ""+testRun.getPlanId()); envVar.put(TESTOPIA_TESTRUN_PLAN_TEXT_VERSION_ENVVAR, ""+testRun.getPlanTextVersion()); envVar.put(TESTOPIA_TESTRUN_STATUS_ENVVAR, ""+testRun.getStatus()); envVar.put(TESTOPIA_TESTRUN_TARGET_COMPLETION_ENVVAR, ""+testRun.getTargetCompletion()); envVar.put(TESTOPIA_TESTRUN_PLAN_TARGET_PASS_ENVVAR, ""+testRun.getTargetPass()); return envVar; } /** * @param report * @param previous * @return */ public static String createReportSummary(Report report, Report previous) { StringBuilder builder = new StringBuilder(); builder.append(Messages.Testopia_Utils_Run(report.getRunId())); builder.append(Messages.Testopia_Utils_Build(report.getBuildId())); builder.append(Messages.Testopia_Utils_Environment(report.getEnvId())); builder.append("<p><a href=\"" + TestopiaBuildAction.URL_NAME + "\">"); Integer total = report.getTestsTotal(); Integer previousTotal = previous != null ? previous.getTestsTotal() : total; Integer passed = report.getPassed(); Integer previousPassed = previous != null ? previous.getPassed() : passed; Integer failed = report.getFailed(); Integer previousFailed = previous != null ? previous.getFailed() : failed; Integer blocked = report.getBlocked(); Integer previousBlocked = previous != null ? previous.getBlocked() : blocked; Integer notRun = report.getNotRun(); Integer previousNotRun = previous != null ? previous.getNotRun() : notRun; builder.append(Messages.Testopia_Utils_Totals( (total + getPlusSignal(total, previousTotal)), (passed + getPlusSignal(passed, previousPassed)), (failed + getPlusSignal(failed, previousFailed)), (blocked + getPlusSignal(blocked, previousBlocked)), (notRun + getPlusSignal(notRun, previousNotRun)))); builder.append("</p>"); return builder.toString(); } /** * Prints the difference between two int values, showing a plus sign if the * current number is greater than the previous. * @param current Current value * @param previous Previous value */ public static String getPlusSignal(int current, int previous) { int difference = current - previous; if (difference > 0) { return " (+" + difference + ")"; } else { return ""; } } /** * @param report * @param previousReport * @return */ public static String createReportSummaryDetails(Report report, Report previousReport) { final StringBuilder builder = new StringBuilder(); builder.append(Messages.Testopia_Utils_Summary()); builder.append("<table border=\"1\">\n"); builder.append("<tr><th>"); builder.append("Test Case ID"); builder.append("</th><th>"); builder.append("Status"); builder.append("</th></tr>\n"); for(TestCaseWrapper tc: report.getTestCases() ) { builder.append("<tr>\n"); builder.append("<td>"+tc.getId()+"</td>"); builder.append("<td>"+Utils.getExecutionStatusTextColored(tc.getStatusId())+"</td>\n"); builder.append("</tr>\n"); } builder.append("</table>"); return builder.toString(); } /** * @param statusId * @return */ private static String getExecutionStatusTextColored(Integer statusId) { Status executionStatus = Status.get((statusId != null ? statusId : Status.IDLE.getValue())); String executionStatusTextColored = "Undefined"; if (executionStatus == Status.FAILED) { executionStatusTextColored = Messages.Testopia_Utils_Failed(); } if (executionStatus == Status.PASSED) { executionStatusTextColored = Messages.Testopia_Utils_Passed(); } if (executionStatus == Status.BLOCKED) { executionStatusTextColored = Messages.Testopia_Utils_Blocked(); } if (executionStatus == Status.IDLE) { executionStatusTextColored = Messages.Testopia_Utils_NotRun(); } return executionStatusTextColored; } }