From fa126dcb394040ac6e4ebf20fea520b14fadaeda Mon Sep 17 00:00:00 2001 From: munmun-mathur Date: Mon, 12 Oct 2015 15:58:54 +0530 Subject: [PATCH 1/9] Implemented tests for the api endpoints. --- automation.api.review.tests/.gitignore | 1 + automation.api.review.tests/pom.xml | 101 +++++ .../review/config/ReviewConfiguration.java | 47 +++ .../com/appirio/api/review/model/User.java | 57 +++ .../appirio/api/review/util/ReviewUtil.java | 189 +++++++++ .../src/main/resources/log4j.xml | 42 ++ .../src/main/resources/review.properties | 4 + .../appirio/api/review/tests/ReviewTest.java | 375 ++++++++++++++++++ .../src/test/resources/review.json | 159 ++++++++ .../src/test/resources/testng.xml | 9 + 10 files changed, 984 insertions(+) create mode 100644 automation.api.review.tests/.gitignore create mode 100644 automation.api.review.tests/pom.xml create mode 100644 automation.api.review.tests/src/main/java/com/appirio/api/review/config/ReviewConfiguration.java create mode 100644 automation.api.review.tests/src/main/java/com/appirio/api/review/model/User.java create mode 100644 automation.api.review.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java create mode 100644 automation.api.review.tests/src/main/resources/log4j.xml create mode 100644 automation.api.review.tests/src/main/resources/review.properties create mode 100644 automation.api.review.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java create mode 100644 automation.api.review.tests/src/test/resources/review.json create mode 100644 automation.api.review.tests/src/test/resources/testng.xml diff --git a/automation.api.review.tests/.gitignore b/automation.api.review.tests/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/automation.api.review.tests/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/automation.api.review.tests/pom.xml b/automation.api.review.tests/pom.xml new file mode 100644 index 0000000..e026a72 --- /dev/null +++ b/automation.api.review.tests/pom.xml @@ -0,0 +1,101 @@ + + 4.0.0 + com.appirio.api.review.tests + automation.api.review.tests + 0.0.1-SNAPSHOT + jar + + automation.api.review.tests + http://maven.apache.org + + UTF-8 + + + + + com.appirio.automation.api + + automation-api + 0.0.1 + + + org.apache.httpcomponents + httpclient + 4.4.1 + + + commons-configuration + commons-configuration + 1.9 + + + org.json + json + 20140107 + + + + + org.testng + testng + 6.8.21 + + + log4j + log4j + 1.2.17 + + + com.fasterxml.jackson.core + jackson-databind + 2.2.3 + + + + + + + org.testng.xslt + testng-xslt-plugin + 1.1 + + true + true + FAIL,PASS,SKIP,CONF + + + + org.apache.maven.plugins + maven-resources-plugin + 2.7 + + + true + + UTF-8 + + + + maven-surefire-plugin + 2.18.1 + + + + src/test/resources/testng.xml + + + + + + maven-compiler-plugin + 3.2 + + 1.6 + 1.6 + UTF-8 + + + + + + \ No newline at end of file diff --git a/automation.api.review.tests/src/main/java/com/appirio/api/review/config/ReviewConfiguration.java b/automation.api.review.tests/src/main/java/com/appirio/api/review/config/ReviewConfiguration.java new file mode 100644 index 0000000..a3e3b20 --- /dev/null +++ b/automation.api.review.tests/src/main/java/com/appirio/api/review/config/ReviewConfiguration.java @@ -0,0 +1,47 @@ +package com.appirio.api.review.config; + +import org.apache.commons.configuration.PropertiesConfiguration; + +import com.appirio.automation.api.config.Configuration; + + + +public class ReviewConfiguration extends Configuration{ + private static final String REVIEW_RETRIEVEREVIEWITEMS = "retrieveReviewItems"; + private static final String REVIEW_ASSIGNNEXTREVIEW = "assignNextReview"; + private static final String REVIEW_CREATEREVIEWITEMS = "createReviewItems"; + private static final String REVIEW_UPDATEREVIEWITEMS = "updateReviewItems"; + private static final String PROPS_REVIEW = "review.properties"; + + private static PropertiesConfiguration reviewPropertyConfig = null; + + private static ReviewConfiguration reviewConfiguration = null; + + private ReviewConfiguration() { + } + + public static ReviewConfiguration initialize() { + if(reviewConfiguration == null) { + reviewConfiguration = new ReviewConfiguration(); + reviewPropertyConfig = reviewConfiguration.loadConfiguration(PROPS_REVIEW); + } + return reviewConfiguration; + } + + public static String getRetrieveReviewItemsEndPoint() { + return getValue(reviewPropertyConfig, REVIEW_RETRIEVEREVIEWITEMS); + } + + public static String getAssignNextReviewEndPoint() { + return getValue(reviewPropertyConfig, REVIEW_ASSIGNNEXTREVIEW); + } + + public static String getCreateReviewItemsEndPoint() { + return getValue(reviewPropertyConfig, REVIEW_CREATEREVIEWITEMS); + } + + public static String getUpdateReviewItemsEndPoint() { + return getValue(reviewPropertyConfig, REVIEW_UPDATEREVIEWITEMS); + } + +} diff --git a/automation.api.review.tests/src/main/java/com/appirio/api/review/model/User.java b/automation.api.review.tests/src/main/java/com/appirio/api/review/model/User.java new file mode 100644 index 0000000..18d9ad0 --- /dev/null +++ b/automation.api.review.tests/src/main/java/com/appirio/api/review/model/User.java @@ -0,0 +1,57 @@ +package com.appirio.api.review.model; + +public class User { + + private String userId ; + private String username; + private String password; + + public User(String userId, String userName, String pass) { + this.userId = userId; + this.username = userName; + this.password = pass; + } + + /** + * @return the userId + */ + public String getUserId() { + return userId; + } + + /** + * @param userId the userId to set + */ + public void setUserId(String userId) { + this.userId = userId; + } + + /** + * @return the username + */ + public String getUsername() { + return username; + } + + /** + * @param username the username to set + */ + public void setUsername(String username) { + this.username = username; + } + + /** + * @return the password + */ + public String getPassword() { + return password; + } + + /** + * @param password the password to set + */ + public void setPassword(String password) { + this.password = password; + } + +} diff --git a/automation.api.review.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java b/automation.api.review.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java new file mode 100644 index 0000000..145c682 --- /dev/null +++ b/automation.api.review.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java @@ -0,0 +1,189 @@ +package com.appirio.api.review.util; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.apache.http.NameValuePair; +import org.apache.http.message.BasicNameValuePair; +import org.testng.Assert; + +import com.appirio.api.review.config.ReviewConfiguration; +import com.appirio.api.review.model.User; +import com.appirio.automation.api.DefaultRequestProcessor; +import com.appirio.automation.api.DefaultResponse; +import com.appirio.automation.api.config.EnvironmentConfiguration; +import com.appirio.automation.api.exception.AutomationException; +import com.appirio.automation.api.service.AuthenticationService; +import com.appirio.automation.api.util.ApiUtil; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; + +public class ReviewUtil { + + /** + * Reads the contents of the json file containing the test data + * @param fileName + * name of json file. + * @return jsonContents + * json string containing the test data + */ + public String getFile(String fileName) { + String jsonContents = ""; + ClassLoader classLoader = getClass().getClassLoader(); + try { + jsonContents = IOUtils.toString(classLoader.getResourceAsStream(fileName)); + } catch (IOException e) { + throw new AutomationException("Some error occurred while reading review.json " + + e.getLocalizedMessage()); + } + return jsonContents; + } + + + /** + * Generate jwt token(v2) of specific user + * @param username + * @param password + * @return headers + */ + public List getHeaderV2(String username,String password) + { + AuthenticationService authService; + authService = new AuthenticationService(); + //Get v3 token + String jwtToken=authService.getAuth0JWTToken(username,password); + List headers = new ArrayList(); + headers.add(new BasicNameValuePair("Content-Type", "application/json")); + headers.add(new BasicNameValuePair("Authorization", "Bearer "+ jwtToken)); + return headers; + } + + /** + * Generate jwt token(v2) + * @return headers + */ + public List getHeaderV2() + { + AuthenticationService authService; + authService = new AuthenticationService(); + //Get v3 token + String jwtToken=authService.getAuth0JWTToken(); + List headers = new ArrayList(); + headers.add(new BasicNameValuePair("Content-Type", "application/json")); + headers.add(new BasicNameValuePair("Authorization", "Bearer "+ jwtToken)); + return headers; + } + + /** + * Verifies that the new review items are added successfully + * @param responseContents + * @param newReviewItemsCreated + * @return compareReviewItems + */ + public boolean verifyNewReviewItemsAddedToTheReview(List responseContents,JsonNode newReviewItemsCreated){ + Iterator elements = newReviewItemsCreated.elements(); + JsonNode newReviewItem; + boolean compareReviewItems = false; + while(elements.hasNext()){ + newReviewItem = elements.next(); + for (JsonNode reviewItemAdded : responseContents) { + if(reviewItemAdded.path("id").asText().equalsIgnoreCase(newReviewItem.asText())) + compareReviewItems = true; + else{ + compareReviewItems = false; + } + } + } + return compareReviewItems; + } + + /** + * Verifies the updations done in the review items. Check is performed only on the 'answer' field, as it is the only field that gets updated. + * @param responseContents + * @param newReviewItemsCreated + * @return compareReviewItems + */ + public boolean verifyUpdatesInReviewItems(List responseContents,JsonNode newReviewItemsCreated){ + Iterator elements = newReviewItemsCreated.elements(); + JsonNode newReviewItem; + boolean compareReviewItems = false; + while(elements.hasNext()){ + newReviewItem = elements.next(); + for (JsonNode reviewItemAdded : responseContents) { + if(reviewItemAdded.path("scorecardQuestionId").asText().equalsIgnoreCase(newReviewItem.path("scorecardQuestionId").asText())){ + if(reviewItemAdded.path("answer").asText().equalsIgnoreCase(newReviewItem.path("answer").asText())){ + compareReviewItems = true; + break; + } + else{ + compareReviewItems = false; + break; + } + } + + } + } + return compareReviewItems; + } + + /** + * Stores all the user details in a map + * @param users + * @return + */ + public static Map getUsers(JsonNode users) { + Map usersMap = new HashMap(); + JsonNode existingUserNode = null; + Iterator elements = users.elements(); + while(elements.hasNext()) { + existingUserNode = elements.next(); + JsonNode paramNode = existingUserNode.path("param"); + User u = new User(paramNode.path("userId").textValue(),paramNode.path("username").textValue(), + paramNode.path("password").textValue()); + usersMap.put(u.getUsername(),u); + } + return usersMap; + } + + + /** + * Adds values to the fields 'reviewId' and 'handle' in the json node used as parameter to get review items. + * @param getReviewItem + * @param reviewId + * @param u + * @return getReviewItem + */ + public JsonNode addValuesToGetReviewItemTestNode(JsonNode getReviewItem ,String reviewId,User u) { + ((ObjectNode)getReviewItem.path("param")).put("handle",u.getUsername()); + ((ObjectNode)getReviewItem.path("param").path("filter")).put("reviewId",reviewId); + return getReviewItem; + + } + + /** + * This methods executes the api to get review items as per the parameters specified. + * @param reviewObject - json object containing filter parameters. + * @param u + * @return response + */ + public DefaultResponse getReviewItems(JsonNode reviewObject, User u){ + String retrieveReviewItemsUrl = EnvironmentConfiguration.getBaseUrl()+ReviewConfiguration.getRetrieveReviewItemsEndPoint(); + List urlParameters=new ArrayList(); + List headers = null; + if(u!=null) + headers = getHeaderV2(u.getUsername(),u.getPassword()); + else + headers = getHeaderV2(); + if(reviewObject.path("param").has("filter")) + urlParameters=ApiUtil.constructParameters(reviewObject.path("param")); + DefaultResponse response = DefaultRequestProcessor.getRequest(retrieveReviewItemsUrl, urlParameters, headers); + return response; + } + +} diff --git a/automation.api.review.tests/src/main/resources/log4j.xml b/automation.api.review.tests/src/main/resources/log4j.xml new file mode 100644 index 0000000..c52cf95 --- /dev/null +++ b/automation.api.review.tests/src/main/resources/log4j.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/automation.api.review.tests/src/main/resources/review.properties b/automation.api.review.tests/src/main/resources/review.properties new file mode 100644 index 0000000..e559560 --- /dev/null +++ b/automation.api.review.tests/src/main/resources/review.properties @@ -0,0 +1,4 @@ +assignNextReview=/reviews/@challengeId/assignNextReview +retrieveReviewItems=/reviewItems/ +createReviewItems=/reviewItems/ +updateReviewItems=/reviewItems/ \ No newline at end of file diff --git a/automation.api.review.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java b/automation.api.review.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java new file mode 100644 index 0000000..a19949e --- /dev/null +++ b/automation.api.review.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java @@ -0,0 +1,375 @@ +package com.appirio.api.review.tests; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.apache.http.NameValuePair; +import org.apache.log4j.Logger; +import org.json.JSONObject; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import com.appirio.api.review.model.User; +import com.appirio.api.review.util.ReviewUtil; +import com.appirio.api.review.config.ReviewConfiguration; +import com.appirio.automation.api.DefaultRequestProcessor; +import com.appirio.automation.api.DefaultResponse; +import com.appirio.automation.api.config.AuthenticationConfiguration; +import com.appirio.automation.api.config.EnvironmentConfiguration; +import com.appirio.automation.api.exception.DefaultRequestProcessorException; +import com.appirio.automation.api.model.AuthenticationInfo; +import com.appirio.automation.api.util.ApiUtil; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + + +/** + * Test class containing tests for review microservice api endpoints. + * Author : Munmun Mathur + * Created Date : 2015/10/08 + * + */ +public class ReviewTest { + final static Logger logger = Logger.getLogger(ReviewTest.class); + + JSONObject jsonObjMain = null; + JsonNode rootNode = null; + JsonNode usersJson = null; + AuthenticationInfo authInfo; + Map usersMap = null; + ReviewUtil util = new ReviewUtil(); + + /** + * Initialise the configurations + * @throws Exception + */ + @BeforeClass + public void setUp() throws Exception { + logger.info("ReviewTest:setUp:Entering set up phase to initialise the configurations."); + EnvironmentConfiguration.initialize(); + AuthenticationConfiguration.initialize(); + ReviewConfiguration.initialize(); + String jsonFile = util.getFile("review.json"); + rootNode = ApiUtil.readJsonFromFile(jsonFile); + usersJson = rootNode.get("userCredentials"); + usersMap = ReviewUtil.getUsers(usersJson); + } + + /** + * This tests the api to get review items as per the parameters specified + */ + @Test(priority = 1, testName = "Get review items", description = "Gets the review items") + public void testRetrieveReviewItems() { + logger.info("ReviewTest:testRetrieveReviewItems:Testing 'Get review items' api endpoint."); + JsonNode reviewNode = rootNode.get("getReviewItems"); + JsonNode reviewObject = null; + Iterator elements = reviewNode.elements(); + DefaultResponse response = null; + JsonNode reviewItemsList = null; + int noOfReviewItems=0; + String userHandle; + int reviewTotalCount=0; + User u = null; + //Iterate over set of review parameters one by one + while(elements.hasNext()) { + reviewObject = elements.next(); + userHandle = reviewObject.path("param").path("handle").textValue(); + u = usersMap.get(userHandle); + response = util.getReviewItems(reviewObject, u); + Assert.assertEquals(response.getCode(), 200); + reviewItemsList = response.getResponseData(); + Assert.assertEquals(reviewItemsList.path("result").path("content").isArray(), true); + noOfReviewItems = reviewItemsList.path("result").path("content").size(); + reviewTotalCount =Integer.parseInt(reviewItemsList.path("result").path("metadata").get("totalCount").asText()); + Assert.assertNotNull(noOfReviewItems); + Assert.assertEquals(noOfReviewItems>=0,true); + Assert.assertEquals(reviewTotalCount>=0,true); + if(reviewObject.path("param").has("filter")) + Assert.assertTrue(noOfReviewItems>0); + else + Assert.assertTrue(noOfReviewItems==0); + if(noOfReviewItems>0){ + ((ObjectNode)reviewObject.path("param")).put("createdBy", u.getUserId()); + ((ObjectNode)reviewObject.path("param")).put("updatedBy", u.getUserId()); + boolean result = ApiUtil.assertQueryResponse(response,reviewObject.get("param").path("filter")); + Assert.assertTrue(result); + result = ApiUtil.assertQueryResponse(response,reviewObject.get("param")); + Assert.assertTrue(result); + } + } + } + + /** + * This tests the api with scenarios when no user is logged in, and when the logged in user does not owns + * the review specified in the filter parameter. + */ + @Test(priority = 2, testName = "Get review items using ", description = "Gets the review items") + public void testRetrieveReviewItemsOtherUser() { + logger.info("ReviewTest:testRetrieveReviewItemsOtherUser:Testing 'Get review items' api endpoint."); + JsonNode reviewNode = rootNode.get("getReviewItemsOtherUser"); + JsonNode reviewObject = null; + Iterator elements = reviewNode.elements(); + DefaultResponse response = null; + JsonNode reviewItemsList = null; + int noOfReviewItems=0; + String userHandle; + int reviewTotalCount=0; + User u = null; + //Iterate over set of review parameters one by one + while(elements.hasNext()) { + reviewObject = elements.next(); + if(reviewObject.path("param").has("handle")){ + userHandle = reviewObject.path("param").path("handle").textValue(); + u = usersMap.get(userHandle); + response = util.getReviewItems(reviewObject, u); + } + else + response = util.getReviewItems(reviewObject, null); + Assert.assertEquals(response.getCode(), 200); + reviewItemsList = response.getResponseData(); + Assert.assertEquals(reviewItemsList.path("result").path("content").isArray(), true); + noOfReviewItems = reviewItemsList.path("result").path("content").size(); + reviewTotalCount =Integer.parseInt(reviewItemsList.path("result").path("metadata").get("totalCount").asText()); + Assert.assertNotNull(noOfReviewItems); + Assert.assertTrue(noOfReviewItems==0); + Assert.assertEquals(reviewTotalCount>=0,true); + } + } + + /** + * This tests the api to create new review items for the logged in user + */ + @Test(priority = 3, testName = "Create review items", description = "Creates new review items") + public void testCreateReviewItems() { + logger.info("ReviewTest:testCreateReviewItems:Testing 'Create review items' api endpoint."); + List headers = null; + String newReviewItems; + JsonNode reviewNode = rootNode.get("createReviewItems"); + JsonNode reviewObject = null; + Iterator elements = reviewNode.elements(); + DefaultResponse response = null; + JsonNode reviewItemsList = null; + int noOfReviewItemsCreated=0; + String createReviewItemsUrl = EnvironmentConfiguration.getBaseUrl()+ReviewConfiguration.getCreateReviewItemsEndPoint(); + String userHandle; + int newReviewItemsCount; + int totalReviewItemsForAReviewBefore; + int totalReviewItemsForAReviewAfter; + User u = null; + JsonNode getReviewItem = null; + String reviewId; + //Iterate over set of review parameters one by one + while(elements.hasNext()) { + reviewObject = elements.next(); + getReviewItem=rootNode.get("getReviewItemsTestData"); + userHandle = reviewObject.path("param").path("handle").textValue(); + u = usersMap.get(userHandle); + headers = util.getHeaderV2(userHandle,u.getPassword()); + reviewId=reviewObject.path("param").path("reviewItems").get(0).path("reviewId").asText(); + getReviewItem=util.addValuesToGetReviewItemTestNode(getReviewItem, reviewId, u); + response = util.getReviewItems(getReviewItem, u); + reviewItemsList = response.getResponseData(); + //Get the count of review items before adding new ones + totalReviewItemsForAReviewBefore = Integer.parseInt(reviewItemsList.path("result").path("metadata").get("totalCount").asText()); + newReviewItemsCount=reviewObject.path("param").path("reviewItems").size(); + newReviewItems = reviewObject.path("param").get("reviewItems").toString(); + response = DefaultRequestProcessor.postRequest(createReviewItemsUrl, null, headers,newReviewItems); + Assert.assertEquals(response.getCode(), 200); + reviewItemsList = response.getResponseData(); + Assert.assertEquals(reviewItemsList.path("result").path("content").isArray(), true); + noOfReviewItemsCreated = reviewItemsList.path("result").path("content").size(); + Assert.assertEquals(noOfReviewItemsCreated, newReviewItemsCount); + getReviewItem=rootNode.get("getReviewItemsTestData"); + reviewId=reviewObject.path("param").path("reviewItems").get(0).path("reviewId").asText(); + getReviewItem=util.addValuesToGetReviewItemTestNode(getReviewItem, reviewId, u); + response = util.getReviewItems(getReviewItem, u); + reviewItemsList = response.getResponseData(); + //Get the count of review items after adding new ones + totalReviewItemsForAReviewAfter = Integer.parseInt(reviewItemsList.path("result").path("metadata").get("totalCount").asText()); + //Assert the count of review items before and after adding new items + Assert.assertEquals(totalReviewItemsForAReviewAfter-totalReviewItemsForAReviewBefore, newReviewItemsCount); + } + } + + /** + * This tests the api to create new review items when the logged in user is not authorised to create new review items. + */ + @Test(priority = 4, testName = "Create review items", description = "Creates the review items", + expectedExceptions=DefaultRequestProcessorException.class) + public void testCreateReviewItemsUnAuthUser() { + logger.info("ReviewTest:testCreateReviewItemsUnAuthUser:Testing 'Create review items' api endpoint."); + List headers = null; + String newReviewItems; + JsonNode reviewNode = rootNode.get("createReviewItemsUnAuthUser"); + JsonNode reviewObject = null; + Iterator elements = reviewNode.elements(); + DefaultResponse response = null; + String createReviewItemsUrl = EnvironmentConfiguration.getBaseUrl()+ReviewConfiguration.getCreateReviewItemsEndPoint(); + String userHandle; + User u = null; + //Iterate over set of review parameters one by one + while(elements.hasNext()) { + reviewObject = elements.next(); + userHandle = reviewObject.path("param").path("handle").textValue(); + u = usersMap.get(userHandle); + headers = util.getHeaderV2(userHandle,u.getPassword()); + newReviewItems = reviewObject.path("param").get("reviewItems").toString(); + response = DefaultRequestProcessor.postRequest(createReviewItemsUrl, null, headers,newReviewItems); + } + } + + /** + * This tests the api to update review items for the logged in user + */ + @Test(priority = 5, testName = "Update review items", description = "Updates the review items") + public void testUpdateReviewItems() { + logger.info("ReviewTest:testUpdateReviewItems:Testing 'Update review items' api endpoint."); + List headers = null; + String updateReviewItems; + JsonNode reviewNode = rootNode.get("updateReviewItems"); + JsonNode reviewObject = null; + JsonNode getReviewItem = null; + Iterator elements = reviewNode.elements(); + DefaultResponse response = null; + String updateReviewItemsUrl = EnvironmentConfiguration.getBaseUrl()+ReviewConfiguration.getUpdateReviewItemsEndPoint(); + String userHandle; + User u = null; + String reviewId; + //Iterate over set of review parameters one by one + while(elements.hasNext()) { + reviewObject = elements.next(); + userHandle = reviewObject.path("param").path("handle").textValue(); + u = usersMap.get(userHandle); + headers = util.getHeaderV2(userHandle,u.getPassword()); + updateReviewItems = reviewObject.path("param").get("reviewItems").toString(); + response = DefaultRequestProcessor.putRequest(updateReviewItemsUrl, null, headers,updateReviewItems); + Assert.assertEquals(response.getCode(), 200); + + getReviewItem=rootNode.get("getReviewItemsTestData"); + reviewId=reviewObject.path("param").path("reviewItems").get(0).path("reviewId").asText(); + getReviewItem=util.addValuesToGetReviewItemTestNode(getReviewItem, reviewId, u); + response = util.getReviewItems(getReviewItem, u); + Assert.assertTrue(util.verifyUpdatesInReviewItems(response.getResponseContents(), reviewObject.path("param").path("reviewItems"))); + + } + } + + /** + * This tests the api to update review items when the logged in user is not authorised to update review items. + */ + @Test(priority = 6, testName = "Update review items by an unauthorised user", description = "Update the review items by an unauthorised user" + ,expectedExceptions=DefaultRequestProcessorException.class) + public void testUpdateReviewItemsUnAuthUser() { + logger.info("ReviewTest:testUpdateReviewItemsUnAuthUser:Testing 'Update review items' api endpoint by an unauthorised user."); + List headers = null; + String updateReviewItems; + JsonNode reviewNode = rootNode.get("updateReviewItemsUnAuthUser"); + JsonNode reviewObject = null; + Iterator elements = reviewNode.elements(); + DefaultResponse response = null; + String updateReviewItemsUrl = EnvironmentConfiguration.getBaseUrl()+ReviewConfiguration.getUpdateReviewItemsEndPoint(); + String userHandle; + User u = null; + //Iterate over set of review parameters one by one + while(elements.hasNext()) { + reviewObject = elements.next(); + userHandle = reviewObject.path("param").path("handle").textValue(); + u = usersMap.get(userHandle); + headers = util.getHeaderV2(userHandle,u.getPassword()); + updateReviewItems = reviewObject.path("param").get("reviewItems").toString(); + response = DefaultRequestProcessor.putRequest(updateReviewItemsUrl, null, headers,updateReviewItems); + + } + } + + /** + * This tests the api to assign next review on a challenge to a user. + */ + +@Test(priority = 7, testName = "Assign next review", description = "Assign next review") + public void testAssignNextReview() { + logger.info("ReviewTest:testAssignNextReview:Testing 'Assign next review' api endpoint."); + List headers = null; + JsonNode reviewNode = rootNode.get("assignNextReview"); + JsonNode reviewObject = null; + Iterator elements = reviewNode.elements(); + DefaultResponse response = null; + String assignNextReviewUrl; + String userHandle; + User u = null; + int reviewId; + //Iterate over set of review parameters one by one + while(elements.hasNext()) { + reviewObject = elements.next(); + assignNextReviewUrl = EnvironmentConfiguration.getBaseUrl()+ReviewConfiguration.getAssignNextReviewEndPoint(); + assignNextReviewUrl = ApiUtil.replaceToken(assignNextReviewUrl, "@challengeId", reviewObject.path("param").get("challengeId").asText()); + userHandle = reviewObject.path("param").path("handle").textValue(); + u = usersMap.get(userHandle); + headers = util.getHeaderV2(userHandle,u.getPassword()); + response = DefaultRequestProcessor.putRequest(assignNextReviewUrl, null, headers,null); + Assert.assertEquals(response.getCode(), 200); + JsonNode reviewItemsList = response.getResponseData(); + reviewId=Integer.parseInt(reviewItemsList.path("result").path("content").asText()); + Assert.assertNotNull(reviewId); + Assert.assertTrue(reviewId>0); + } + } + + /** + * This tests the api to assign next review on a challenge to a user who is not authorised for this operation. + */ + @Test(priority = 8, testName = "Assign next review by an unauthorised user", description = "Assign next review by an unauthorised user", + expectedExceptions=DefaultRequestProcessorException.class) + public void testAssignNextReviewUnAuthUser() { + + logger.info("ReviewTest:testAssignNextReviewUnAuthUser:Testing 'Assign next review' api endpoint by an unauthorised user."); + List headers = null; + JsonNode reviewNode = rootNode.get("assignNextReviewUnAuthUser"); + JsonNode reviewObject = null; + Iterator elements = reviewNode.elements(); + DefaultResponse response = null; + String assignNextReviewUrl; + String userHandle; + User u = null; + //Iterate over set of review parameters one by one + while(elements.hasNext()) { + reviewObject = elements.next(); + assignNextReviewUrl = EnvironmentConfiguration.getBaseUrl()+ReviewConfiguration.getAssignNextReviewEndPoint(); + assignNextReviewUrl = ApiUtil.replaceToken(assignNextReviewUrl, "@challengeId", reviewObject.path("param").get("challengeId").asText()); + userHandle = reviewObject.path("param").path("handle").textValue(); + u = usersMap.get(userHandle); + headers = util.getHeaderV2(userHandle,u.getPassword()); + response = DefaultRequestProcessor.putRequest(assignNextReviewUrl, null, headers,null); + } + } + + /** + * This tests the api to assign next review on a challenge to a user who already has 5 open reviews. + */ + + @Test(priority = 9, testName = "Assign next review by a user who already has 5 open reviews", description = "Assign next review by a user who already has 5 open reviews", + expectedExceptions=DefaultRequestProcessorException.class) + public void testAssignNextReviewUserWithOpenReview() { + logger.info("ReviewTest:testAssignNextReviewUserWithOpenReview:Testing 'Assign next review' api endpoint by a user who already has 5 open reviews."); + List headers = null; + JsonNode reviewNode = rootNode.get("assignNextReviewUserWithOpenReviews"); + JsonNode reviewObject = null; + Iterator elements = reviewNode.elements(); + DefaultResponse response = null; + String assignNextReviewUrl; + String userHandle; + User u = null; + //Iterate over set of review parameters one by one + while(elements.hasNext()) { + reviewObject = elements.next(); + assignNextReviewUrl = EnvironmentConfiguration.getBaseUrl()+ReviewConfiguration.getAssignNextReviewEndPoint(); + assignNextReviewUrl = ApiUtil.replaceToken(assignNextReviewUrl, "@challengeId", reviewObject.path("param").get("challengeId").asText()); + userHandle = reviewObject.path("param").path("handle").textValue(); + u = usersMap.get(userHandle); + headers = util.getHeaderV2(userHandle,u.getPassword()); + response = DefaultRequestProcessor.putRequest(assignNextReviewUrl, null, headers,null); + } + } +} diff --git a/automation.api.review.tests/src/test/resources/review.json b/automation.api.review.tests/src/test/resources/review.json new file mode 100644 index 0000000..ea54026 --- /dev/null +++ b/automation.api.review.tests/src/test/resources/review.json @@ -0,0 +1,159 @@ +{ + "userCredentials" : [ + { + "param" : { + "userId" : "8547899", + "username" : "TonyJ", + "password" : "appirio123" + } + }, + { + "param" : { + "userId" : "1800119", + "username" : "Satine", + "password" : "appirio123" + } + }, + { + "param" : { + "userId" : "1800089", + "username" : "thseagle", + "password" : "appirio123" + } + }], + "getReviewItemsTestData" : + { + "param" : { + "handle" : "", + "filter" : { + "reviewId" : "" + } + } + }, + "getReviewItems" :[ + + { + "param" : { + "handle" : "Satine" + } + }, + { + "param" : { + "handle" : "Satine", + "filter" : { + "reviewId" : "388902" + } + } + } + ], + "getReviewItemsOtherUser" :[ + + { + "param" : { + "filter" : { + "reviewId" : "388902" + } + } + }, + { + "param" : { + "handle" : "TonyJ", + "filter" : { + "reviewId" : "388902" + } + } + } + ], + "assignNextReview" : [ + { + "param" : { + "handle" : "Satine", + "challengeId" : "30049271" + } + }], + "assignNextReviewUserWithOpenReviews" : [ + { + "param" : { + "handle" : "Satine", + "challengeId" : "30049301" + } + }], + "assignNextReviewUnAuthUser" : [ + { + "param" : { + "handle" : "thseagle", + "challengeId" : "30049301" + } + }], + "createReviewItems" :[ + + { + "param" : { + "handle" : "Satine", + "reviewItems" : + [{"reviewId":388902,"scorecardQuestionId":30005883,"uploadId":506602,"answer":"1", + "comments":[{"content":"test","resourceId":1031290,"commentTypeId":1}]}, + {"reviewId":388902,"scorecardQuestionId":30005884,"uploadId":506602,"answer":"2", + "comments":[{"content":"test","resourceId":1031290,"commentTypeId":1}]}, + {"reviewId":388902,"scorecardQuestionId":30005885,"uploadId":506602,"answer":"3", + "comments":[{"content":"test","resourceId":1031290,"commentTypeId":1}]}, + {"reviewId":388902,"scorecardQuestionId":30005886,"uploadId":506602,"answer":"1", + "comments":[{"content":"test","resourceId":1031290,"commentTypeId":1}]}, + {"reviewId":388902,"scorecardQuestionId":30005887,"uploadId":506602,"answer":"2", + "comments":[{"content":"test","resourceId":1031290,"commentTypeId":1}]}] + } + } + ], + "updateReviewItems" :[ + + { + "param" : { + "handle" : "thseagle", + "reviewItems" : + [{"reviewId":321919,"scorecardQuestionId":30005883,"uploadId":506612,"answer":"1", + "comments":[{"content":"test","resourceId":1031061,"commentTypeId":1}],"id":8113820}, + {"reviewId":321919,"scorecardQuestionId":30005884,"uploadId":506612,"answer":"3", + "comments":[{"content":"test","resourceId":1031061,"commentTypeId":1}],"id":8113821}, + {"reviewId":321919,"scorecardQuestionId":30005885,"uploadId":506612,"answer":"1", + "comments":[{"content":"test","resourceId":1031061,"commentTypeId":1}],"id":8113822}, + {"reviewId":321919,"scorecardQuestionId":30005886,"uploadId":506612,"answer":"2", + "comments":[{"content":"test","resourceId":1031061,"commentTypeId":1}],"id":8113823}, + {"reviewId":321919,"scorecardQuestionId":30005887,"uploadId":506612,"answer":"1", + "comments":[{"content":"test","resourceId":1031061,"commentTypeId":1}],"id":8113824}] + } + } + ], + "updateReviewItemsUnAuthUser" :[ + + { + "param" : { + "handle" : "TonyJ", + "reviewItems" : + [{"reviewId":321919,"scorecardQuestionId":30005883,"uploadId":506612,"answer":"1", + "comments":[{"content":"test","resourceId":1031061,"commentTypeId":1}],"id":8113820}, + {"reviewId":321919,"scorecardQuestionId":30005884,"uploadId":506612,"answer":"3", + "comments":[{"content":"test","resourceId":1031061,"commentTypeId":1}],"id":8113821}, + {"reviewId":321919,"scorecardQuestionId":30005885,"uploadId":506612,"answer":"1", + "comments":[{"content":"test","resourceId":1031061,"commentTypeId":1}],"id":8113822}, + {"reviewId":321919,"scorecardQuestionId":30005886,"uploadId":506612,"answer":"2", + "comments":[{"content":"test","resourceId":1031061,"commentTypeId":1}],"id":8113823}, + {"reviewId":321919,"scorecardQuestionId":30005887,"uploadId":506612,"answer":"1", + "comments":[{"content":"test","resourceId":1031061,"commentTypeId":1}],"id":8113824}] + } + } + ], + "createReviewItemsUnAuthUser" :[ + { + "param" : { + "handle" : "TonyJ", + "reviewItems" : + [{"reviewId":388902,"scorecardQuestionId":30005883,"uploadId":506602,"answer":"1", + "comments":[{"content":"test","resourceId":1031290,"commentTypeId":1}]}, + {"reviewId":388902,"scorecardQuestionId":30005884,"uploadId":506602,"answer":"2", + "comments":[{"content":"test","resourceId":1031290,"commentTypeId":1}]}] + } + + } + ] + +} diff --git a/automation.api.review.tests/src/test/resources/testng.xml b/automation.api.review.tests/src/test/resources/testng.xml new file mode 100644 index 0000000..cb47b18 --- /dev/null +++ b/automation.api.review.tests/src/test/resources/testng.xml @@ -0,0 +1,9 @@ + + + + + + + + + From cfd2765ec8dfdb90303bf793bd89c290f912c5d5 Mon Sep 17 00:00:00 2001 From: munmun-mathur Date: Wed, 14 Oct 2015 15:27:53 +0530 Subject: [PATCH 2/9] Updated code to get more than 50 review items. Add env props. --- automation.api.review.tests/pom.xml | 110 +++++++++++------- .../appirio/api/review/util/ReviewUtil.java | 4 +- .../src/main/resources/environment.properties | 9 ++ .../appirio/api/review/tests/ReviewTest.java | 43 ++++++- .../src/test/resources/review.json | 6 +- automation.api.review.tests/token.properties | 7 ++ 6 files changed, 125 insertions(+), 54 deletions(-) create mode 100644 automation.api.review.tests/src/main/resources/environment.properties create mode 100644 automation.api.review.tests/token.properties diff --git a/automation.api.review.tests/pom.xml b/automation.api.review.tests/pom.xml index e026a72..a7ec198 100644 --- a/automation.api.review.tests/pom.xml +++ b/automation.api.review.tests/pom.xml @@ -52,50 +52,70 @@ - - - - org.testng.xslt - testng-xslt-plugin - 1.1 - - true - true - FAIL,PASS,SKIP,CONF - - - - org.apache.maven.plugins - maven-resources-plugin - 2.7 - - - true - - UTF-8 - - - - maven-surefire-plugin - 2.18.1 - - - - src/test/resources/testng.xml - - - - - - maven-compiler-plugin - 3.2 - - 1.6 - 1.6 - UTF-8 - - - - + + + org.testng.xslt + testng-xslt-plugin + 1.1 + + true + true + FAIL,PASS,SKIP,CONF + + + + org.apache.maven.plugins + maven-resources-plugin + 2.7 + + + true + + UTF-8 + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.7 + 1.7 + + + + + com.google.code.maven-replacer-plugin + replacer + 1.5.3 + + + generate-test-sources + + replace + + + + + + ${basedir}/target/**/*.properties + + ${basedir}/token.properties + + + + + + maven-surefire-plugin + 2.18.1 + + + src/test/resources/testng.xml + + + + + \ No newline at end of file diff --git a/automation.api.review.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java b/automation.api.review.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java index 145c682..33c52e8 100644 --- a/automation.api.review.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java +++ b/automation.api.review.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java @@ -86,8 +86,8 @@ public List getHeaderV2() * @param newReviewItemsCreated * @return compareReviewItems */ - public boolean verifyNewReviewItemsAddedToTheReview(List responseContents,JsonNode newReviewItemsCreated){ - Iterator elements = newReviewItemsCreated.elements(); + public boolean verifyNewReviewItemsAddedToTheReview(List responseContents,List newReviewItemsCreated){ + Iterator elements = newReviewItemsCreated.iterator(); JsonNode newReviewItem; boolean compareReviewItems = false; while(elements.hasNext()){ diff --git a/automation.api.review.tests/src/main/resources/environment.properties b/automation.api.review.tests/src/main/resources/environment.properties new file mode 100644 index 0000000..54f34fd --- /dev/null +++ b/automation.api.review.tests/src/main/resources/environment.properties @@ -0,0 +1,9 @@ +auth0URL=https://@application.auth.domain@.auth0.com/oauth/ro +baseURL=http://api.@application.auth.domain@.com/v3 +baseV2Url=http://api.@application.auth.domain@.com/v2 +client_id=@client_id@ +username=@username@ +password=@password@ +connection=@connection@ +grant_type=@grant_type@ +scope=@scope@ \ No newline at end of file diff --git a/automation.api.review.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java b/automation.api.review.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java index a19949e..5c50714 100644 --- a/automation.api.review.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java +++ b/automation.api.review.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java @@ -29,7 +29,7 @@ * Test class containing tests for review microservice api endpoints. * Author : Munmun Mathur * Created Date : 2015/10/08 - * + * Updated Date : 2015/10/14 */ public class ReviewTest { final static Logger logger = Logger.getLogger(ReviewTest.class); @@ -58,7 +58,8 @@ public void setUp() throws Exception { } /** - * This tests the api to get review items as per the parameters specified + * This tests the api to get review items as per the parameters specified. It uses review id as the filter parameter. + * The logged in user owns the review specified in the filter parameter. */ @Test(priority = 1, testName = "Get review items", description = "Gets the review items") public void testRetrieveReviewItems() { @@ -139,7 +140,8 @@ public void testRetrieveReviewItemsOtherUser() { } /** - * This tests the api to create new review items for the logged in user + * This tests the api to create new review items for the logged in user. Here, the new review itens are created using post call, and then + * a get call is done to check if the newly created review items appear in the list of review items for the review */ @Test(priority = 3, testName = "Create review items", description = "Creates new review items") public void testCreateReviewItems() { @@ -160,6 +162,10 @@ public void testCreateReviewItems() { User u = null; JsonNode getReviewItem = null; String reviewId; + List newReviewItemsCreated = null; + int responseContentSize = 0; + int offset = 0; + //Iterate over set of review parameters one by one while(elements.hasNext()) { reviewObject = elements.next(); @@ -175,21 +181,47 @@ public void testCreateReviewItems() { totalReviewItemsForAReviewBefore = Integer.parseInt(reviewItemsList.path("result").path("metadata").get("totalCount").asText()); newReviewItemsCount=reviewObject.path("param").path("reviewItems").size(); newReviewItems = reviewObject.path("param").get("reviewItems").toString(); + + //POST request to add new review items response = DefaultRequestProcessor.postRequest(createReviewItemsUrl, null, headers,newReviewItems); Assert.assertEquals(response.getCode(), 200); reviewItemsList = response.getResponseData(); + newReviewItemsCreated = response.getResponseContents(); Assert.assertEquals(reviewItemsList.path("result").path("content").isArray(), true); noOfReviewItemsCreated = reviewItemsList.path("result").path("content").size(); Assert.assertEquals(noOfReviewItemsCreated, newReviewItemsCount); + + //Get all the review items for the review to check that new review items are created successfully. getReviewItem=rootNode.get("getReviewItemsTestData"); reviewId=reviewObject.path("param").path("reviewItems").get(0).path("reviewId").asText(); getReviewItem=util.addValuesToGetReviewItemTestNode(getReviewItem, reviewId, u); + ((ObjectNode)getReviewItem.path("param")).put("offset", "0"); + ((ObjectNode)getReviewItem.path("param")).put("limit", "50"); response = util.getReviewItems(getReviewItem, u); reviewItemsList = response.getResponseData(); //Get the count of review items after adding new ones totalReviewItemsForAReviewAfter = Integer.parseInt(reviewItemsList.path("result").path("metadata").get("totalCount").asText()); + //Assert the count of review items before and after adding new items Assert.assertEquals(totalReviewItemsForAReviewAfter-totalReviewItemsForAReviewBefore, newReviewItemsCount); + responseContentSize=response.getResponseContents().size(); + //Check that the newly created review items appear in the list of review items for the review + boolean success = util.verifyNewReviewItemsAddedToTheReview(response.getResponseContents(),newReviewItemsCreated); + while(!success && responseContentSize==50){ + //Get next items list after every 50 records + offset=offset+responseContentSize; + ((ObjectNode)getReviewItem.path("param")).remove("offset"); + ((ObjectNode)getReviewItem.path("param")).remove("limit"); + ((ObjectNode)getReviewItem.path("param")).put("offset", offset); + ((ObjectNode)getReviewItem.path("param")).put("limit", "50"); + response = util.getReviewItems(getReviewItem, u); + reviewItemsList = response.getResponseData(); + responseContentSize=response.getResponseContents().size(); + success = util.verifyNewReviewItemsAddedToTheReview(response.getResponseContents(),newReviewItemsCreated); + } + ((ObjectNode)getReviewItem.path("param")).remove("offset"); + ((ObjectNode)getReviewItem.path("param")).remove("limit"); + Assert.assertTrue(success); } } @@ -221,7 +253,8 @@ public void testCreateReviewItemsUnAuthUser() { } /** - * This tests the api to update review items for the logged in user + * This tests the api to update review items for the logged in user. Only the 'answer' field is checked for updates, as it is the only field + * that gets updated. */ @Test(priority = 5, testName = "Update review items", description = "Updates the review items") public void testUpdateReviewItems() { @@ -288,7 +321,7 @@ public void testUpdateReviewItemsUnAuthUser() { * This tests the api to assign next review on a challenge to a user. */ -@Test(priority = 7, testName = "Assign next review", description = "Assign next review") + @Test(priority = 7, testName = "Assign next review", description = "Assign next review") public void testAssignNextReview() { logger.info("ReviewTest:testAssignNextReview:Testing 'Assign next review' api endpoint."); List headers = null; diff --git a/automation.api.review.tests/src/test/resources/review.json b/automation.api.review.tests/src/test/resources/review.json index ea54026..3ef4034 100644 --- a/automation.api.review.tests/src/test/resources/review.json +++ b/automation.api.review.tests/src/test/resources/review.json @@ -42,7 +42,9 @@ "handle" : "Satine", "filter" : { "reviewId" : "388902" - } + }, + "offset" : "0", + "limit" : "50" } } ], @@ -68,7 +70,7 @@ { "param" : { "handle" : "Satine", - "challengeId" : "30049271" + "challengeId" : "30049330" } }], "assignNextReviewUserWithOpenReviews" : [ diff --git a/automation.api.review.tests/token.properties b/automation.api.review.tests/token.properties new file mode 100644 index 0000000..a97b46b --- /dev/null +++ b/automation.api.review.tests/token.properties @@ -0,0 +1,7 @@ +@application.auth.domain@=topcoder-dev +@client_id@=JFDo7HMkf0q2CkVFHojy3zHWafziprhT +@username@=kohatatest40 +@password@=appirio123[ +@connection@=LDAP +@grant_type@=password +@scope@=openid profile \ No newline at end of file From 7cca6348f1fb4a8b124967cdbdd0671af8a84a29 Mon Sep 17 00:00:00 2001 From: munmun-mathur Date: Wed, 14 Oct 2015 16:53:41 +0530 Subject: [PATCH 3/9] Changed project name to api.tests --- {automation.api.review.tests => api.tests}/.gitignore | 0 {automation.api.review.tests => api.tests}/pom.xml | 0 .../java/com/appirio/api/review/config/ReviewConfiguration.java | 0 .../src/main/java/com/appirio/api/review/model/User.java | 0 .../src/main/java/com/appirio/api/review/util/ReviewUtil.java | 0 .../src/main/resources/environment.properties | 0 .../src/main/resources/log4j.xml | 0 .../src/main/resources/review.properties | 0 .../src/test/java/com/appirio/api/review/tests/ReviewTest.java | 0 .../src/test/resources/review.json | 0 .../src/test/resources/testng.xml | 0 {automation.api.review.tests => api.tests}/token.properties | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename {automation.api.review.tests => api.tests}/.gitignore (100%) rename {automation.api.review.tests => api.tests}/pom.xml (100%) rename {automation.api.review.tests => api.tests}/src/main/java/com/appirio/api/review/config/ReviewConfiguration.java (100%) rename {automation.api.review.tests => api.tests}/src/main/java/com/appirio/api/review/model/User.java (100%) rename {automation.api.review.tests => api.tests}/src/main/java/com/appirio/api/review/util/ReviewUtil.java (100%) rename {automation.api.review.tests => api.tests}/src/main/resources/environment.properties (100%) rename {automation.api.review.tests => api.tests}/src/main/resources/log4j.xml (100%) rename {automation.api.review.tests => api.tests}/src/main/resources/review.properties (100%) rename {automation.api.review.tests => api.tests}/src/test/java/com/appirio/api/review/tests/ReviewTest.java (100%) rename {automation.api.review.tests => api.tests}/src/test/resources/review.json (100%) rename {automation.api.review.tests => api.tests}/src/test/resources/testng.xml (100%) rename {automation.api.review.tests => api.tests}/token.properties (100%) diff --git a/automation.api.review.tests/.gitignore b/api.tests/.gitignore similarity index 100% rename from automation.api.review.tests/.gitignore rename to api.tests/.gitignore diff --git a/automation.api.review.tests/pom.xml b/api.tests/pom.xml similarity index 100% rename from automation.api.review.tests/pom.xml rename to api.tests/pom.xml diff --git a/automation.api.review.tests/src/main/java/com/appirio/api/review/config/ReviewConfiguration.java b/api.tests/src/main/java/com/appirio/api/review/config/ReviewConfiguration.java similarity index 100% rename from automation.api.review.tests/src/main/java/com/appirio/api/review/config/ReviewConfiguration.java rename to api.tests/src/main/java/com/appirio/api/review/config/ReviewConfiguration.java diff --git a/automation.api.review.tests/src/main/java/com/appirio/api/review/model/User.java b/api.tests/src/main/java/com/appirio/api/review/model/User.java similarity index 100% rename from automation.api.review.tests/src/main/java/com/appirio/api/review/model/User.java rename to api.tests/src/main/java/com/appirio/api/review/model/User.java diff --git a/automation.api.review.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java b/api.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java similarity index 100% rename from automation.api.review.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java rename to api.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java diff --git a/automation.api.review.tests/src/main/resources/environment.properties b/api.tests/src/main/resources/environment.properties similarity index 100% rename from automation.api.review.tests/src/main/resources/environment.properties rename to api.tests/src/main/resources/environment.properties diff --git a/automation.api.review.tests/src/main/resources/log4j.xml b/api.tests/src/main/resources/log4j.xml similarity index 100% rename from automation.api.review.tests/src/main/resources/log4j.xml rename to api.tests/src/main/resources/log4j.xml diff --git a/automation.api.review.tests/src/main/resources/review.properties b/api.tests/src/main/resources/review.properties similarity index 100% rename from automation.api.review.tests/src/main/resources/review.properties rename to api.tests/src/main/resources/review.properties diff --git a/automation.api.review.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java b/api.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java similarity index 100% rename from automation.api.review.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java rename to api.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java diff --git a/automation.api.review.tests/src/test/resources/review.json b/api.tests/src/test/resources/review.json similarity index 100% rename from automation.api.review.tests/src/test/resources/review.json rename to api.tests/src/test/resources/review.json diff --git a/automation.api.review.tests/src/test/resources/testng.xml b/api.tests/src/test/resources/testng.xml similarity index 100% rename from automation.api.review.tests/src/test/resources/testng.xml rename to api.tests/src/test/resources/testng.xml diff --git a/automation.api.review.tests/token.properties b/api.tests/token.properties similarity index 100% rename from automation.api.review.tests/token.properties rename to api.tests/token.properties From ca8f5b6124039e4278d2ffbec8ffd40b570ff557 Mon Sep 17 00:00:00 2001 From: munmun-mathur Date: Tue, 27 Oct 2015 16:53:54 +0530 Subject: [PATCH 4/9] Made changes in code to get v3 auth token as the apis are now working on v3 token. --- .../appirio/api/review/util/ReviewUtil.java | 40 +++++++++++++++++-- .../appirio/api/review/tests/ReviewTest.java | 23 +++++++---- api.tests/src/test/resources/review.json | 4 +- 3 files changed, 53 insertions(+), 14 deletions(-) diff --git a/api.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java b/api.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java index 33c52e8..33e9025 100644 --- a/api.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java +++ b/api.tests/src/main/java/com/appirio/api/review/util/ReviewUtil.java @@ -56,7 +56,7 @@ public List getHeaderV2(String username,String password) { AuthenticationService authService; authService = new AuthenticationService(); - //Get v3 token + //Get v2 token String jwtToken=authService.getAuth0JWTToken(username,password); List headers = new ArrayList(); headers.add(new BasicNameValuePair("Content-Type", "application/json")); @@ -64,6 +64,36 @@ public List getHeaderV2(String username,String password) return headers; } + /** + * Generate jwt token(v3) of specific user + * @param username + * @param password + * @return headers + */ + public List getHeader(String username,String password){ + //Generate jwt token + AuthenticationService authService = new AuthenticationService(); + String jwtToken=authService.getV3JWTToken(username,password); + List headers = new ArrayList(); + headers.add(new BasicNameValuePair("Content-Type", "application/json")); + headers.add(new BasicNameValuePair("Authorization", "Bearer "+ jwtToken)); + return headers; + } + + /** + * Generate jwt token(v3) of default user(admin) + * @return headers + */ + public List getHeader(){ + //Generate jwt token + AuthenticationService authService = new AuthenticationService(); + String jwtToken=authService.getV3JWTToken(); + List headers = new ArrayList(); + headers.add(new BasicNameValuePair("Content-Type", "application/json")); + headers.add(new BasicNameValuePair("Authorization", "Bearer "+ jwtToken)); + return headers; + } + /** * Generate jwt token(v2) * @return headers @@ -72,7 +102,7 @@ public List getHeaderV2() { AuthenticationService authService; authService = new AuthenticationService(); - //Get v3 token + //Get v2 token String jwtToken=authService.getAuth0JWTToken(); List headers = new ArrayList(); headers.add(new BasicNameValuePair("Content-Type", "application/json")); @@ -177,9 +207,11 @@ public DefaultResponse getReviewItems(JsonNode reviewObject, User u){ List urlParameters=new ArrayList(); List headers = null; if(u!=null) - headers = getHeaderV2(u.getUsername(),u.getPassword()); + //headers = getHeaderV2(u.getUsername(),u.getPassword()); + headers =getHeader(u.getUsername(),u.getPassword()); else - headers = getHeaderV2(); + //headers = getHeaderV2(); + headers =getHeader(); if(reviewObject.path("param").has("filter")) urlParameters=ApiUtil.constructParameters(reviewObject.path("param")); DefaultResponse response = DefaultRequestProcessor.getRequest(retrieveReviewItemsUrl, urlParameters, headers); diff --git a/api.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java b/api.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java index 5c50714..97b6862 100644 --- a/api.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java +++ b/api.tests/src/test/java/com/appirio/api/review/tests/ReviewTest.java @@ -106,7 +106,7 @@ public void testRetrieveReviewItems() { * This tests the api with scenarios when no user is logged in, and when the logged in user does not owns * the review specified in the filter parameter. */ - @Test(priority = 2, testName = "Get review items using ", description = "Gets the review items") + @Test(priority = 2, testName = "Get review items using other user's credentials", description = "Gets the review items") public void testRetrieveReviewItemsOtherUser() { logger.info("ReviewTest:testRetrieveReviewItemsOtherUser:Testing 'Get review items' api endpoint."); JsonNode reviewNode = rootNode.get("getReviewItemsOtherUser"); @@ -172,7 +172,8 @@ public void testCreateReviewItems() { getReviewItem=rootNode.get("getReviewItemsTestData"); userHandle = reviewObject.path("param").path("handle").textValue(); u = usersMap.get(userHandle); - headers = util.getHeaderV2(userHandle,u.getPassword()); + //headers = util.getHeaderV2(userHandle,u.getPassword()); + headers = util.getHeader(userHandle,u.getPassword()); reviewId=reviewObject.path("param").path("reviewItems").get(0).path("reviewId").asText(); getReviewItem=util.addValuesToGetReviewItemTestNode(getReviewItem, reviewId, u); response = util.getReviewItems(getReviewItem, u); @@ -246,7 +247,8 @@ public void testCreateReviewItemsUnAuthUser() { reviewObject = elements.next(); userHandle = reviewObject.path("param").path("handle").textValue(); u = usersMap.get(userHandle); - headers = util.getHeaderV2(userHandle,u.getPassword()); + //headers = util.getHeaderV2(userHandle,u.getPassword()); + headers = util.getHeader(userHandle,u.getPassword()); newReviewItems = reviewObject.path("param").get("reviewItems").toString(); response = DefaultRequestProcessor.postRequest(createReviewItemsUrl, null, headers,newReviewItems); } @@ -275,7 +277,8 @@ public void testUpdateReviewItems() { reviewObject = elements.next(); userHandle = reviewObject.path("param").path("handle").textValue(); u = usersMap.get(userHandle); - headers = util.getHeaderV2(userHandle,u.getPassword()); + headers = util.getHeader(userHandle,u.getPassword()); + //headers = util.getHeaderV2(userHandle,u.getPassword()); updateReviewItems = reviewObject.path("param").get("reviewItems").toString(); response = DefaultRequestProcessor.putRequest(updateReviewItemsUrl, null, headers,updateReviewItems); Assert.assertEquals(response.getCode(), 200); @@ -310,7 +313,8 @@ public void testUpdateReviewItemsUnAuthUser() { reviewObject = elements.next(); userHandle = reviewObject.path("param").path("handle").textValue(); u = usersMap.get(userHandle); - headers = util.getHeaderV2(userHandle,u.getPassword()); + //headers = util.getHeaderV2(userHandle,u.getPassword()); + headers = util.getHeader(userHandle,u.getPassword()); updateReviewItems = reviewObject.path("param").get("reviewItems").toString(); response = DefaultRequestProcessor.putRequest(updateReviewItemsUrl, null, headers,updateReviewItems); @@ -340,7 +344,8 @@ public void testAssignNextReview() { assignNextReviewUrl = ApiUtil.replaceToken(assignNextReviewUrl, "@challengeId", reviewObject.path("param").get("challengeId").asText()); userHandle = reviewObject.path("param").path("handle").textValue(); u = usersMap.get(userHandle); - headers = util.getHeaderV2(userHandle,u.getPassword()); + //headers = util.getHeaderV2(userHandle,u.getPassword()); + headers = util.getHeader(userHandle,u.getPassword()); response = DefaultRequestProcessor.putRequest(assignNextReviewUrl, null, headers,null); Assert.assertEquals(response.getCode(), 200); JsonNode reviewItemsList = response.getResponseData(); @@ -373,7 +378,8 @@ public void testAssignNextReviewUnAuthUser() { assignNextReviewUrl = ApiUtil.replaceToken(assignNextReviewUrl, "@challengeId", reviewObject.path("param").get("challengeId").asText()); userHandle = reviewObject.path("param").path("handle").textValue(); u = usersMap.get(userHandle); - headers = util.getHeaderV2(userHandle,u.getPassword()); + headers = util.getHeader(userHandle,u.getPassword()); + //headers = util.getHeaderV2(userHandle,u.getPassword()); response = DefaultRequestProcessor.putRequest(assignNextReviewUrl, null, headers,null); } } @@ -401,7 +407,8 @@ public void testAssignNextReviewUserWithOpenReview() { assignNextReviewUrl = ApiUtil.replaceToken(assignNextReviewUrl, "@challengeId", reviewObject.path("param").get("challengeId").asText()); userHandle = reviewObject.path("param").path("handle").textValue(); u = usersMap.get(userHandle); - headers = util.getHeaderV2(userHandle,u.getPassword()); + headers = util.getHeader(userHandle,u.getPassword()); + //headers = util.getHeaderV2(userHandle,u.getPassword()); response = DefaultRequestProcessor.putRequest(assignNextReviewUrl, null, headers,null); } } diff --git a/api.tests/src/test/resources/review.json b/api.tests/src/test/resources/review.json index 3ef4034..31d9348 100644 --- a/api.tests/src/test/resources/review.json +++ b/api.tests/src/test/resources/review.json @@ -70,7 +70,7 @@ { "param" : { "handle" : "Satine", - "challengeId" : "30049330" + "challengeId" : "30049290" } }], "assignNextReviewUserWithOpenReviews" : [ @@ -158,4 +158,4 @@ } ] -} +} \ No newline at end of file From a92bed17ca485a5daf7fd54aee72a776ab0280ad Mon Sep 17 00:00:00 2001 From: munmun-mathur Date: Mon, 14 Dec 2015 14:01:20 +0530 Subject: [PATCH 5/9] Added JaCoCo plugin for coverage reports. --- api.tests/pom.xml | 60 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/api.tests/pom.xml b/api.tests/pom.xml index a7ec198..c64243d 100644 --- a/api.tests/pom.xml +++ b/api.tests/pom.xml @@ -53,6 +53,31 @@ + + org.jacoco + jacoco-maven-plugin + 0.7.4.201502262128 + + ${basedir}/target/jacoco.exec + + + + + jacoco-initialize + + prepare-agent + + + + jacoco-site + test + + report + + + + + org.testng.xslt testng-xslt-plugin @@ -117,5 +142,38 @@ - + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + org.jacoco + + jacoco-maven-plugin + + + [0.7.4.201502262128,) + + + prepare-agent + + + + + + + + + + + + + \ No newline at end of file From b6dac53cd80d42bf6dcaf3eafe26e4e7917968f0 Mon Sep 17 00:00:00 2001 From: Parth Shah Date: Wed, 3 Feb 2016 17:39:56 -0800 Subject: [PATCH 6/9] Updating auth scheme from v2 to v3 --- service/run-config/dev/src/main/resources/supply-server.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/service/run-config/dev/src/main/resources/supply-server.yaml b/service/run-config/dev/src/main/resources/supply-server.yaml index 218404a..9339089 100644 --- a/service/run-config/dev/src/main/resources/supply-server.yaml +++ b/service/run-config/dev/src/main/resources/supply-server.yaml @@ -146,10 +146,10 @@ logging: timeZone: UTC logFormat: "%-5level [%d{yyyy-dd-mm HH:mm:ss.SSS}] [%thread] %logger - %msg%n" -authScheme: v2 +authScheme: v3 # File service domain fileServiceDomain: api.topcoder-dev.com # Api version -apiVersion: v3 \ No newline at end of file +apiVersion: v3 From 5511b1b6b3acac3dc05c1346ec9602999ddd8986 Mon Sep 17 00:00:00 2001 From: Parth Shah Date: Wed, 10 Feb 2016 11:13:08 -0800 Subject: [PATCH 7/9] Update pom.xml updating core library version --- service/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/pom.xml b/service/pom.xml index c168bda..fa19c1b 100644 --- a/service/pom.xml +++ b/service/pom.xml @@ -176,7 +176,7 @@ com.appirio.tech.core.api tech.core.api - API-3.0.0.8-SNAPSHOT + API-3.0.0.10-SNAPSHOT com.informix.jdbc From 6e75305739c71d51873d3bea83227dd0a38136b0 Mon Sep 17 00:00:00 2001 From: Parth Shah Date: Wed, 10 Feb 2016 11:35:00 -0800 Subject: [PATCH 8/9] Update pom.xml using previous version of core lib --- service/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/pom.xml b/service/pom.xml index fa19c1b..c168bda 100644 --- a/service/pom.xml +++ b/service/pom.xml @@ -176,7 +176,7 @@ com.appirio.tech.core.api tech.core.api - API-3.0.0.10-SNAPSHOT + API-3.0.0.8-SNAPSHOT com.informix.jdbc From 3057f2b5cc0accec1ba5808628a44277aa5c2699 Mon Sep 17 00:00:00 2001 From: Parth Shah Date: Wed, 10 Feb 2016 16:54:08 -0800 Subject: [PATCH 9/9] using v3 in qa and prod --- service/run-config/prod/src/main/resources/supply-server.yaml | 2 +- service/run-config/qa/src/main/resources/supply-server.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/service/run-config/prod/src/main/resources/supply-server.yaml b/service/run-config/prod/src/main/resources/supply-server.yaml index 948d5cf..622cd8b 100644 --- a/service/run-config/prod/src/main/resources/supply-server.yaml +++ b/service/run-config/prod/src/main/resources/supply-server.yaml @@ -151,4 +151,4 @@ authScheme: v3 fileServiceDomain: api.topcoder.com # Api version -apiVersion: v3.0.0-BETA \ No newline at end of file +apiVersion: v3 \ No newline at end of file diff --git a/service/run-config/qa/src/main/resources/supply-server.yaml b/service/run-config/qa/src/main/resources/supply-server.yaml index d4c1480..0fb2bbe 100644 --- a/service/run-config/qa/src/main/resources/supply-server.yaml +++ b/service/run-config/qa/src/main/resources/supply-server.yaml @@ -151,4 +151,4 @@ authScheme: v3 fileServiceDomain: api.topcoder-qa.com # Api version -apiVersion: v3.0.0 \ No newline at end of file +apiVersion: v3 \ No newline at end of file