diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTAdminDashboard.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTAdminDashboard.java
index f0ed3a50..bb986338 100644
--- a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTAdminDashboard.java
+++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTAdminDashboard.java
@@ -31,6 +31,8 @@ import org.wso2.iot.integration.ui.pages.devices.EnrollDevicePage;
import org.wso2.iot.integration.ui.pages.groups.DeviceAddGroupPage;
import org.wso2.iot.integration.ui.pages.groups.DeviceGroupsPage;
import org.wso2.iot.integration.ui.pages.login.LoginPage;
+import org.wso2.iot.integration.ui.pages.policy.PolicyAddPage;
+import org.wso2.iot.integration.ui.pages.policy.PolicyPage;
import org.wso2.iot.integration.ui.pages.uesr.AddUserPage;
import org.wso2.iot.integration.ui.pages.uesr.UserListingPage;
@@ -97,6 +99,17 @@ public class IOTAdminDashboard {
return new DeviceGroupsPage(driver);
}
+ /**
+ * Performs the navigation to policy management page.
+ *
+ * @return {@link PolicyPage} which includes functionality which can be done in policy management page
+ * @throws IOException If error occurs when getting the {@link PolicyPage}
+ */
+ public PolicyPage getPolicyManagementPage() throws IOException {
+ driver.findElement(By.xpath(uiElementMapper.getElement("iot.policy.viewButton.xpath"))).click();
+ return new PolicyPage(driver);
+ }
+
/**
* Navigates to the Add User page.
* @return : Add user page.
diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyAddPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyAddPage.java
new file mode 100644
index 00000000..eb991fb1
--- /dev/null
+++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyAddPage.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2018, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache 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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.wso2.iot.integration.ui.pages.policy;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+import org.wso2.iot.integration.ui.pages.UIElementMapper;
+import org.wso2.iot.integration.ui.pages.UIUtils;
+
+import java.io.IOException;
+
+public class PolicyAddPage {
+
+ private WebDriver driver;
+ private UIElementMapper uiElementMapper;
+
+ public PolicyAddPage(WebDriver driver) throws IOException {
+ this.driver = driver;
+ this.uiElementMapper = UIElementMapper.getInstance();
+ WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
+
+ if (!webDriverWait
+ .until(ExpectedConditions.titleContains(uiElementMapper.getElement("cdmf.policy.add.page")))) {
+ throw new IllegalStateException("This is not the Add Group page");
+ }
+ }
+
+ /**
+ * Adds an android policy.
+ *
+ * @param name name of the policy
+ * @param description description of the policy
+ * @return {@link PolicyPage}
+ * @throws IOException If error occurred when adding a policy
+ */
+ public PolicyPage addAndroidSamplePolicy(String name, String description) throws IOException {
+ WebElement androidPolicyCreateButton = driver.findElement(By.xpath(
+ uiElementMapper.getElement("iot.policy.add.android.policy.xpath")));
+ androidPolicyCreateButton.click();
+ WebElement androidPasscodePolicy = driver.findElement(By.xpath(
+ uiElementMapper.getElement("iot.policy.android.passcode.policy.button")));
+ androidPasscodePolicy.click();
+ WebElement androidPasscodePolicyEnableButton = driver.findElement(By.xpath(
+ uiElementMapper.getElement("iot.policy.android.passcode.policy.enable.button")));
+ androidPasscodePolicyEnableButton.click();
+ WebElement androidPolicyConfigContinueButton = driver.findElement(By.xpath(
+ uiElementMapper.getElement("iot.policy.android.policy.configuration.continue.button")));
+ androidPolicyConfigContinueButton.click();
+ WebElement androidPolicyAssignGroupsContinueButton = driver.findElement(By.xpath(
+ uiElementMapper.getElement("iot.policy.android.assignGroups.continue.button")));
+ androidPolicyAssignGroupsContinueButton.click();
+ WebElement androidPolicyNameInput = driver.findElement(By.xpath(
+ uiElementMapper.getElement("iot.policy.android.name.input")));
+ WebElement androidPolicyDescriptionInput = driver.findElement(By.xpath(
+ uiElementMapper.getElement("iot.policy.android.description.input")));
+ WebElement androidPolicyPublishButton = driver.findElement(By.xpath(
+ uiElementMapper.getElement("iot.policy.android.publish.button")));
+
+ androidPolicyNameInput.sendKeys(name);
+ androidPolicyDescriptionInput.sendKeys(description);
+ androidPolicyPublishButton.click();
+
+ return new PolicyPage(driver);
+ }
+}
diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyPage.java
new file mode 100644
index 00000000..3feb75ef
--- /dev/null
+++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyPage.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2018, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache 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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.wso2.iot.integration.ui.pages.policy;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+import org.wso2.iot.integration.ui.pages.UIElementMapper;
+import org.wso2.iot.integration.ui.pages.UIUtils;
+
+import java.io.IOException;
+
+public class PolicyPage {
+
+ private WebDriver driver;
+ private UIElementMapper uiElementMapper;
+
+ public PolicyPage(WebDriver driver) throws IOException {
+ this.driver = driver;
+ this.uiElementMapper = UIElementMapper.getInstance();
+ WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
+
+ if (!webDriverWait.until(ExpectedConditions.titleContains(uiElementMapper.getElement("cdmf.policy.page")))) {
+ throw new IllegalStateException("This is not the Policy page");
+ }
+ }
+
+ /**
+ * Method to go to the add policy page, by clicking the Add policy button.
+ * @return {@link PolicyAddPage} add policy page
+ */
+ public PolicyAddPage addNewPolicy() throws IOException {
+ WebElement addPolicyButton = driver.findElement(By.xpath(
+ uiElementMapper.getElement("iot.policy.add.button.xpath")));
+ addPolicyButton.click();
+ return new PolicyAddPage(driver);
+ }
+
+ /**
+ * Method to go to the view policy page, by clicking a policy
+ * @return {@link PolicyViewPage} view policy page
+ * @throws IOException If unable to navigate to view policy page
+ */
+ public PolicyViewPage viewPolicy() throws IOException {
+ WebElement policyViewIcon = driver.findElement(By.xpath(uiElementMapper.getElement("iot.policy.view.icon")));
+ policyViewIcon.click();
+ return new PolicyViewPage(driver);
+ }
+}
diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyViewPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyViewPage.java
new file mode 100644
index 00000000..09e72845
--- /dev/null
+++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyViewPage.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2018, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache 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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.wso2.iot.integration.ui.pages.policy;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+import org.wso2.iot.integration.ui.pages.UIElementMapper;
+import org.wso2.iot.integration.ui.pages.UIUtils;
+
+import java.io.IOException;
+
+public class PolicyViewPage {
+
+ private WebDriver driver;
+ private UIElementMapper uiElementMapper;
+
+ public PolicyViewPage(WebDriver driver) throws IOException {
+ this.driver = driver;
+ this.uiElementMapper = UIElementMapper.getInstance();
+ WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
+
+ if (!webDriverWait
+ .until(ExpectedConditions.titleContains(uiElementMapper.getElement("cdmf.policy.view.page")))) {
+ throw new IllegalStateException("This is not the Add Group page");
+ }
+ }
+
+ /**
+ * Tests if the policy is viewable
+ * @return {@code true} if policy is viewable
+ */
+ public boolean isPolicyViewable() {
+ return driver.findElements(By.xpath(uiElementMapper.getElement("iot.policy.view.passcode.element"))).size()
+ != 0;
+ }
+}
diff --git a/modules/integration/tests-common/web-ui-pages/src/main/resources/mapper.properties b/modules/integration/tests-common/web-ui-pages/src/main/resources/mapper.properties
index edba2fed..30752722 100644
--- a/modules/integration/tests-common/web-ui-pages/src/main/resources/mapper.properties
+++ b/modules/integration/tests-common/web-ui-pages/src/main/resources/mapper.properties
@@ -24,6 +24,9 @@ cdmf.error.page=Error | CDMF
cdmf.user.home.page=Device Management | CDMF
cdmf.groups.page=Group Management | CDMF
cdmf.user.add.page=User Management | Add User | CDMF
+cdmf.policy.page=Policy Management | WSO2 IoT Server
+cdmf.policy.add.page=Policy Management | Add Policy | WSO2 IoT Server
+cdmf.policy.view.page=Policy Management | View Policy | WSO2 IoT Server
# User registration and login details-----------------------------------------------------------------------------------
@@ -103,6 +106,20 @@ iot.device.group.addGroupForm.addButton.id=add-group-btn
iot.device.groups.view.header.xpath=/html/body/div[3]/div[2]/div/h1[1]
+#Policy Page Elements
+iot.policy.viewButton.xpath=/html/body/div[3]/div[2]/div/div[3]/div[4]/div/div[2]/div[2]/span[2]/a[1]
+iot.policy.add.button.xpath=//*[@id="ast-container"]/div/h3[3]/a
+iot.policy.add.android.policy.xpath=/html/body/div[3]/div[2]/div/div[3]/div/div[6]/div/div[2]/div/div[2]/div/ul/li[1]/a
+iot.policy.android.passcode.policy.button=//*[@id="device-type-policy-operations"]/div/div[1]/a[1]
+iot.policy.android.passcode.policy.enable.button=//*[@id="passcode-policy-lbl"]/input
+iot.policy.android.policy.configuration.continue.button=/html/body/div[3]/div[2]/div/div[3]/div/div[5]/div/div[2]/div/div[3]/a[2]
+iot.policy.android.assignGroups.continue.button=/html/body/div[3]/div[2]/div/div[3]/div/div[4]/div/div[2]/div/div[3]/a[2]
+iot.policy.android.name.input=//*[@id="policy-name-input"]
+iot.policy.android.description.input=//*[@id="policy-description-input"]
+iot.policy.android.publish.button=/html/body/div[3]/div[2]/div/div[3]/div/div[3]/div/div[2]/div/div[3]/a[2]
+iot.policy.view.icon=//*[@id="policy-grid"]/tbody/tr/td[1]
+iot.policy.view.passcode.element=//*[@id="device-type-policy-operations"]/div/div[1]/a[1]
+
#/html/body/div[3]/div[2]/div/div[3]/div/div/div[1]/label
iot.device.groups.add.emptyfrom.error=/html/body/div[3]/div[2]/div/div[3]/div/div/div[1]/label
diff --git a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/policy/PolicyTest.java b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/policy/PolicyTest.java
new file mode 100644
index 00000000..f5859656
--- /dev/null
+++ b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/policy/PolicyTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache 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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.wso2.carbon.iot.integration.web.ui.test.policy;
+
+import org.openqa.selenium.WebDriver;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.wso2.carbon.automation.extensions.selenium.BrowserManager;
+import org.wso2.carbon.iot.integration.web.ui.test.common.IOTIntegrationUIBaseTestCase;
+import org.wso2.carbon.iot.integration.web.ui.test.common.LoginUtils;
+import org.wso2.iot.integration.ui.pages.home.IOTAdminDashboard;
+import org.wso2.iot.integration.ui.pages.policy.PolicyAddPage;
+import org.wso2.iot.integration.ui.pages.policy.PolicyPage;
+import org.wso2.iot.integration.ui.pages.policy.PolicyViewPage;
+
+import java.io.IOException;
+
+public class PolicyTest extends IOTIntegrationUIBaseTestCase {
+
+ private WebDriver driver;
+ private IOTAdminDashboard adminDashboard;
+
+ @BeforeClass(alwaysRun = true)
+ public void setup() throws Exception {
+ super.init();
+ driver = BrowserManager.getWebDriver();
+ LoginUtils.login(driver, automationContext, getWebAppURL());
+ adminDashboard = new IOTAdminDashboard(driver);
+ }
+
+ @Test(description = "Test for adding a new policy.")
+ public void addNewPolicyTest() throws IOException {
+ PolicyPage policyPage = adminDashboard.getPolicyManagementPage();
+ PolicyAddPage policyAddPage = policyPage.addNewPolicy();
+ policyAddPage.addAndroidSamplePolicy("TestPolicy", "This is a sample policy");
+ }
+
+ @Test(description = "Test for adding a new policy.", dependsOnMethods = "addNewPolicyTest")
+ public void policyViewTest() throws IOException {
+ PolicyPage policyPage = adminDashboard.getPolicyManagementPage();
+ PolicyViewPage policyViewPage = policyPage.viewPolicy();
+ Assert.assertTrue(policyViewPage.isPolicyViewable());
+ }
+
+}
diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml b/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml
index 73139933..fd2532f2 100644
--- a/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml
+++ b/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml
@@ -35,6 +35,7 @@
+