Package com.denimgroup.threadfix.service.defects

Source Code of com.denimgroup.threadfix.service.defects.JiraTests

////////////////////////////////////////////////////////////////////////
//
//     Copyright (c) 2009-2014 Denim Group, Ltd.
//
//     The contents of this file are subject to the Mozilla Public License
//     Version 2.0 (the "License"); you may not use this file except in
//     compliance with the License. You may obtain a copy of the License at
//     http://www.mozilla.org/MPL/
//
//     Software distributed under the License is distributed on an "AS IS"
//     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
//     License for the specific language governing rights and limitations
//     under the License.
//
//     The Original Code is ThreadFix.
//
//     The Initial Developer of the Original Code is Denim Group, Ltd.
//     Portions created by Denim Group, Ltd. are Copyright (C)
//     Denim Group, Ltd. All Rights Reserved.
//
//     Contributor(s): Denim Group, Ltd.
//
////////////////////////////////////////////////////////////////////////
package com.denimgroup.threadfix.service.defects;

import com.denimgroup.threadfix.data.entities.Defect;
import com.denimgroup.threadfix.data.entities.DefectTrackerType;
import com.denimgroup.threadfix.service.defects.mock.RestUtilsMock;
import com.denimgroup.threadfix.service.defects.util.DefectUtils;
import com.denimgroup.threadfix.service.defects.utils.DynamicFormField;
import com.denimgroup.threadfix.service.defects.utils.jira.UserRetriever;
import org.junit.Test;

import java.util.List;
import java.util.Map;

import static com.denimgroup.threadfix.service.defects.util.TestConstants.*;
import static org.junit.Assert.*;

// TODO test some more edge cases
public class JiraTests {

    // Setup methods; these should be modified for each type or genericized to work for all types

    public AbstractDefectTracker getTracker() {
        DefectTrackerType type = new DefectTrackerType();

        type.setName(DefectTrackerType.JIRA);

        AbstractDefectTracker tracker = DefectTrackerFactory.getTracker(type);

        ((JiraDefectTracker) tracker).restUtils = new RestUtilsMock();

        return tracker;
    }

    public AbstractDefectTracker getConfiguredTracker() {
        AbstractDefectTracker tracker = getTracker();

        tracker.setUrl(JIRA_BASE_URL);
        tracker.setUsername(JIRA_USERNAME);
        tracker.setPassword(JIRA_PASSWORD);
        tracker.setProjectName(JIRA_VALID_PROJECT);

        return tracker;
    }

    // Generic Tests

    @Test
    public void testFactory() {
        AbstractDefectTracker jiraTracker = getTracker();

        assertTrue("Incorrect tracker returned from factory.", jiraTracker instanceof JiraDefectTracker);
    }

    @Test
    public void testHasValidUrl() {
        AbstractDefectTracker jiraTracker = getTracker();

        jiraTracker.setUrl(JIRA_BASE_URL);

        assertTrue("URL was supposed to be valid", jiraTracker.hasValidUrl());
    }

    @Test
    public void testInvalidUrl() {
        AbstractDefectTracker jiraTracker = getTracker();

        jiraTracker.setUrl("http://fake.com");

        assertFalse("Jira accepted fake url", jiraTracker.hasValidUrl());

        assertNotNull("Tracker error was null.", jiraTracker.getTrackerError());
    }

    @Test
    public void testHasValidCredentials() {
        AbstractDefectTracker jiraTracker = getTracker();

        jiraTracker.setUrl(JIRA_BASE_URL);
        jiraTracker.setUsername(JIRA_USERNAME);
        jiraTracker.setPassword(JIRA_PASSWORD);

        assertTrue("Credentials were supposed to be valid.", jiraTracker.hasValidCredentials());
    }

    @Test
    public void testGetProjectNames() {
        AbstractDefectTracker jiraTracker = getConfiguredTracker();

        List<String> projects = jiraTracker.getProductNames();

        assertTrue("Length was supposed to be 3. It was " + projects.size(), projects.size() == 3);
    }

    @Test
    public void testHasValidProjectName() {
        AbstractDefectTracker jiraTracker = getConfiguredTracker();

        assertTrue("Project name was supposed to be valid.", jiraTracker.hasValidProjectName());
    }

    @Test
    public void testInvalidProjectName() {
        AbstractDefectTracker jiraTracker = getTracker();

        jiraTracker.setUrl(JIRA_BASE_URL);
        jiraTracker.setUsername(JIRA_USERNAME);
        jiraTracker.setPassword(JIRA_PASSWORD);
        jiraTracker.setProjectName("Dummy Project Name");

        assertFalse("Project name wasn't supposed to be valid.", jiraTracker.hasValidProjectName());
    }

    @Test
    public void testDefectCount() {
        AbstractDefectTracker jiraTracker = getConfiguredTracker();

        assertTrue("Expected 38 issues, got " + jiraTracker.getDefectList().size(), jiraTracker.getDefectList().size() == 38);
    }

    @Test
    public void testSubmitDefect() {
        AbstractDefectTracker jiraTracker = getConfiguredTracker();

        String nativeId = jiraTracker.createDefect(DefectUtils.getSampleVulnerabilities(),
                DefectUtils.getBasicMetadata(jiraTracker.getProjectMetadata()));

        assertTrue("Expected NCT-38 issues, got " + nativeId, "NCT-38".equals(nativeId));
    }

    @Test
    public void testDefectStatusUpdateCloseDefect() {
        AbstractDefectTracker jiraTracker = getConfiguredTracker();

        List<Defect> defects = DefectUtils.getDefectList("NCT-38");

        // This data structure was a bad idea
        Map<Defect, Boolean> resultMap = jiraTracker.getMultipleDefectStatus(defects);

        String status = defects.get(0).getStatus();

        assertTrue("Expected 'Closed', got '" + status + "'", "Closed".equals(status));

        assertFalse("Defect should have been closed.", resultMap.get(defects.get(0)));
    }

    @Test
    public void testDefectStatusUpdateNoChange() {
        AbstractDefectTracker jiraTracker = getConfiguredTracker();

        List<Defect> defects = DefectUtils.getDefectList("PDP-60");

        Map<Defect, Boolean> resultMap = jiraTracker.getMultipleDefectStatus(defects);

        String status = defects.get(0).getStatus();

        assertTrue("Expected 'Open', got '" + status + "'", "Open".equals(status));

        assertTrue("Defect should have been open.", resultMap.get(defects.get(0)));
    }

    // Jira-specific tests

    @Test
    public void testRestrictedReportField() {
        AbstractDefectTracker jiraTracker = getConfiguredTracker();

        // beautiful code
        ((RestUtilsMock) ((JiraDefectTracker) jiraTracker).restUtils).reporterRestricted = true;

        String nativeId = jiraTracker.createDefect(DefectUtils.getSampleVulnerabilities(),
                DefectUtils.getBasicMetadata(jiraTracker.getProjectMetadata()));

        assertTrue("Expected NCT-38 for the issue ID, got " + nativeId, "NCT-38".equals(nativeId));
    }

    @Test
    public void testMetadataParsing() {
        AbstractDefectTracker jiraTracker = getConfiguredTracker();

        List<DynamicFormField> editableFields = jiraTracker.getProjectMetadata().getEditableFields();

        assert editableFields != null : "Dynamic fields were null.";
        assert !editableFields.isEmpty() : "Fields were empty.";

        assert editableFields.size() == 16 : "Got " + editableFields.size() + " fields instead of 17.";
    }

    @Test
    public void testMetadataParsingCustomFields() {
        AbstractDefectTracker jiraTracker = getConfiguredTracker();
        jiraTracker.setProjectId("TEST");

        List<DynamicFormField> editableFields = jiraTracker.getProjectMetadata().getEditableFields();

        assert editableFields != null : "Dynamic fields were null.";
        assert !editableFields.isEmpty() : "Fields were empty.";

        assert editableFields.size() == 27 : "Got " + editableFields.size() + " fields instead of 16.";
    }

    @Test
    public void testUserParsing() {
        UserRetriever retriever = new UserRetriever(JIRA_USERNAME, JIRA_PASSWORD,
                "NCT", JIRA_BASE_URL + "/rest/api/2/", new RestUtilsMock());

        Map<String, String> userMap = retriever.getUserMap();

        assertTrue("User map was null.", userMap != null);
        assertTrue("User map should have contained one item, contained " + userMap.size(), userMap.size() == 1);

    }

}
TOP

Related Classes of com.denimgroup.threadfix.service.defects.JiraTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.