001package com.thed.util;
002
003import com.thed.model.*;
004import com.thed.zblast.parser.jaxb.junit.Testsuite;
005import com.thed.zblast.parser.model.TCRCatalogTreeTestcase;
006import com.thed.zblast.parser.model.TCRTestcase;
007import com.thed.zblast.parser.model.TestcaseModel;
008import org.apache.commons.configuration.PropertiesConfiguration;
009
010import javax.xml.datatype.DatatypeConfigurationException;
011import java.text.SimpleDateFormat;
012import java.util.*;
013import java.util.logging.Logger;
014
015import static com.thed.util.ZeeConstants.*;
016
017public class ZephyrTestCaseUploader {
018        private static Logger logger = Logger.getLogger(ZephyrTestCaseUploader.class.getName());
019
020
021
022
023        public ZephyrConfigModel publishTests(List<TestcaseModel> testcaseModelList, AutomationJobDetail automationJobDetail,
024                                                  List<Testsuite> testSuiteList, Long userId, TCRCatalogTreeDTO tree) {
025            ZephyrConfigModel zephyrConfig = null;
026                try {
027                         PropertiesConfiguration props = Utils.getZbotProperties();
028                         zephyrConfig = initializeZephyrData(automationJobDetail, props,userId);
029                         ZephyrSoapClient client = new ZephyrSoapClient();
030                } catch (Exception e) {
031                        logger.info(e.getMessage());
032                }
033                
034                return zephyrConfig;
035        }
036        
037        public ZephyrConfigModel publishcyclesandExecutions (List<TCRCatalogTreeTestcase> testcases,
038                        AutomationJobDetail automationJobDetail, Long userId, ZephyrConfigModel zephyrData) {
039                try {
040                        ZephyrSoapClient client = new ZephyrSoapClient();
041                        client.uploadTestResults(zephyrData, testcases,automationJobDetail);
042                } catch (DatatypeConfigurationException e) {
043                        logger.severe(e.getMessage());
044                } catch (Exception e) {
045                        logger.severe(e.getMessage());
046                }
047
048                return zephyrData;
049        }
050        
051        
052
053        public  ZephyrConfigModel initializeZephyrData(AutomationJobDetail automationJobDetail,
054                        PropertiesConfiguration props, Long userId) {
055                try {
056                        
057                        SimpleDateFormat sdf = new SimpleDateFormat(ZeeConstants.DATE_FORMAT);
058                        String dateFormatForCycleCreation = sdf.format(new Date());
059                        String cycleName=automationJobDetail.getCycleName();
060                        String phaseName=automationJobDetail.getPhaseName();
061                        if(cycleName !=null && !cycleName.isEmpty()){
062                                if(cycleName.length()>ZeeConstants.CYCLE_NAME_LIMIT){
063                                        cycleName=cycleName.substring(0,cycleName.length()-(cycleName.length()-ZeeConstants.CYCLE_NAME_LIMIT));
064                                }
065                        }
066                        if(phaseName !=null && !phaseName.isEmpty()){
067                                if(phaseName.length()>ZeeConstants.CYCLE_NAME_LIMIT){
068                                        phaseName=phaseName.substring(0,phaseName.length()-(phaseName.length()-ZeeConstants.CYCLE_NAME_LIMIT));
069                                }
070                        }
071                        if(automationJobDetail.getIsTimeStamp()) {
072                                cycleName=cycleName+ZeeConstants.CYCLE_PREFIX_DELIMITER+dateFormatForCycleCreation;
073                                phaseName=phaseName+ZeeConstants.CYCLE_PREFIX_DELIMITER+dateFormatForCycleCreation;
074                        }
075                        
076                        ZephyrConfigModel zephyrData = new ZephyrConfigModel();
077                        zephyrData.setSelectedZephyrServer(new ZephyrInstance(props.getString(ZeeConstants.ZEPHYR_SERVER_URL)));
078                        zephyrData.setCycleDuration(automationJobDetail.getCycleDuration()==0 ? ZeeConstants.DEFAULT_CYCLE_DURATION:String.valueOf(automationJobDetail.getCycleDuration()));
079                        zephyrData.setZephyrProjectId(automationJobDetail.getProjectId());
080                        zephyrData.setReleaseId(automationJobDetail.getReleaseId());
081                        zephyrData.setCycleId(ZeeConstants.NEW_CYCLE_KEY_IDENTIFIER);
082                        zephyrData.setPhaseName((phaseName!=null && !phaseName.isEmpty())?(phaseName):(automationJobDetail.getAutomationFramework()));
083                        zephyrData.setUserId(userId);
084                        zephyrData.setCycleName(cycleName);
085                        zephyrData.setCreatePhase(automationJobDetail.getCreatePhase());
086                        zephyrData.setJobIntiatedBy(automationJobDetail.getJobIntiatedBy());
087                        zephyrData.setAssignResultsTo(automationJobDetail.getAssignResultsTo());
088                        zephyrData.setCycleStartDate(automationJobDetail.getCycleStartDate());
089                        zephyrData.setCycleEndDate(automationJobDetail.getCycleEndDate());
090                        
091                        
092                        return zephyrData;
093                } catch (Exception e) {
094                        logger.severe(e.getMessage());
095                        return null;
096                }
097        }
098
099        public  boolean prepareZephyrTests(ZephyrConfigModel zephyrConfig, List<TestcaseModel> testsFromTestSuiteList, List<Testsuite> testSuiteList, Boolean createPackage) {
100                try {
101
102                        Set<String> packageNames = new HashSet<String>();
103                        List<TestCaseResultModel> testcases = new ArrayList<TestCaseResultModel>();
104            List<String> testcaseNameList=new ArrayList<>();
105                        for(TestcaseModel testcaseModel:testsFromTestSuiteList){
106                                TCRTestcase testcase = new TCRTestcase();
107                                String testcaseName = testcaseModel.getTcName();
108                                if(testcaseName.length() >= ZeeConstants.CYCLE_NAME_LIMIT) {
109                    testcaseNameList.add(testcaseName);
110                                }
111                                packageNames.add(testcaseModel.getPackageName());
112                                testcase.setName(testcaseModel.getTestcaseName());
113                                testcase.setComments(TEST_CASE_COMMENT);
114                                testcase.setAutomated(AUTOMATED);
115                                testcase.setPriority(TEST_CASE_PRIORITY);
116                                testcase.setTag(testcaseModel.getTestcaseTag());
117                                testcase.setScriptName(SCRIPT_FILE_FOR_AUTOMATED_TESTCASE);
118                                testcase.setScriptPath(SCRIPT_FILE_FOR_AUTOMATED_TESTCASE);
119                                testcase.setScriptId(SCRIPT_FILE_FOR_AUTOMATED_TESTCASE);
120                                
121                                logger.info("tcm.getTcName():::"+testcaseModel.getTcName());
122                                logger.info("tcm.getClassName():::"+testcaseModel.getClassName());
123                                testcase.setMetadataTCName(testcaseModel.getTcName());
124                                testcase.setMetadataTCClassName(testcaseModel.getClassName());
125                                
126                                TestCaseResultModel caseWithStatus = new TestCaseResultModel();
127                                caseWithStatus.setExecutionRequest(testcaseModel.getExecutionRequest());
128                                caseWithStatus.setTestcase(testcase);
129                                caseWithStatus.setTestStep(testcaseModel.getTestStep());
130                                caseWithStatus.setTestStep(testcaseModel.getTestStep());
131                                caseWithStatus.setAttachment(testcaseModel.getAttachement());
132                if(testcaseModel.getTestcaseAttachement()!=null){
133                    caseWithStatus.setTestcaseAttachement(testcaseModel.getTestcaseAttachement());
134                }
135                if(testcaseModel.getRequirements()!=null){
136                    caseWithStatus.setTestcaseRequirement(testcaseModel.getRequirements());
137                }
138                                testcases.add(caseWithStatus);
139                        }
140                        if (createPackage) {
141                                zephyrConfig.setPackageNames(packageNames);
142                                zephyrConfig.setCreatePackage(true);
143                        } else {
144                                zephyrConfig.setCreatePackage(false);
145                        }
146                        zephyrConfig.setTestcases(testcases);
147
148            if(!testcaseNameList.isEmpty()){
149                                logger.warning("""
150                                                Total %d testcases exceed 255 characters limit on name, trimming name to fit size. Example: %s""".formatted(testcaseNameList.size(), testcaseNameList.get(0)));
151            }
152                        
153                        return true;
154                } catch (Exception e) {
155                        logger.severe(e.getMessage());
156                        return false;
157                }
158        }
159}