From dc9c4d61077dabbf0ed5e70f4e51311530daf72f Mon Sep 17 00:00:00 2001 From: Penelope Zisimopoulou Date: Thu, 23 Jun 2016 00:31:59 +0300 Subject: [PATCH 01/29] Frontend js unit tests #676 --- tests/common/sketches_counters/Readme.txt | 26 ++++++ tests/common/sketches_counters/__init__.py | 0 .../test_sketches_counters.py | 80 +++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 tests/common/sketches_counters/Readme.txt create mode 100644 tests/common/sketches_counters/__init__.py create mode 100644 tests/common/sketches_counters/test_sketches_counters.py diff --git a/tests/common/sketches_counters/Readme.txt b/tests/common/sketches_counters/Readme.txt new file mode 100644 index 0000000..da7c919 --- /dev/null +++ b/tests/common/sketches_counters/Readme.txt @@ -0,0 +1,26 @@ +Pull Request: +https://github.com/codebendercc/codebender.cc/pull/676 + +Selenium_Test_Script + +Homepage Test Caces: +test_sketches_counters.py : Check that the counters of the sketches are correct. + + +Login and visit the new home page. +Create 2 public sketches +Create 2 private sketches +Check that when the page loads, the loading screen appears and message "Loading the Sketches, please wait" is displayed. +Check that the counters: + Public sketches (blue) have the correct value. + Private sketches (purple) have the correct value. +Check that the counter for private projects also appears at the Badges section and has the correct value. +Check that if your account has private projects (e.g. 2) and all yor projects are public, counter for available private sketches should be 0/number of total private sketches(e.g. 0/2) and the link to the private sketches should be Add more. + +Check that the number of private projects available is updated each time that you make a change (e.g from private to public and vice versa). + Change the privite sketch to public + Change the public to private + + + + diff --git a/tests/common/sketches_counters/__init__.py b/tests/common/sketches_counters/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/common/sketches_counters/test_sketches_counters.py b/tests/common/sketches_counters/test_sketches_counters.py new file mode 100644 index 0000000..dea76a0 --- /dev/null +++ b/tests/common/sketches_counters/test_sketches_counters.py @@ -0,0 +1,80 @@ +from codebender_testing.utils import SeleniumTestCase +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys +from selenium.webdriver.support.ui import Select +from selenium.common.exceptions import NoSuchElementException +from selenium.common.exceptions import NoAlertPresentException +import unittest, time, re + +class TestSketchesCounters(SeleniumTestCase): + + def test_sketches_counters(self): + self.driver = webdriver.Firefox() + self.driver.implicitly_wait(30) + self.base_url = "https://staging.codebender.cc/" + self.verificationErrors = [] + self.accept_next_alert = True + driver = self.driver + driver.get(self.base_url + "/") + driver.find_element_by_id("login_btn").click() + driver.find_element_by_id("username").clear() + driver.find_element_by_id("username").send_keys("demo_user") + driver.find_element_by_id("password").clear() + driver.find_element_by_id("password").send_keys("testerPASS") + driver.find_element_by_id("_submit").click() + driver.find_element_by_id("create_sketch_btn").click() + + + driver.find_element_by_id("create-sketch-modal-action-button").click() + time.sleep(5) + driver.find_element_by_id("logo_small").click() + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_id("create-sketch-modal-action-button").click() + time.sleep(5) + driver.find_element_by_id("logo_small").click() + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_xpath("(//input[@name='create-sketch-modal-title'])[2]").click() + driver.find_element_by_id("create-sketch-modal-action-button").click() + time.sleep(5) + driver.find_element_by_id("logo_small").click() + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_xpath("(//input[@name='create-sketch-modal-title'])[2]").click() + driver.find_element_by_id("create-sketch-modal-action-button").click() + time.sleep(5) + driver.find_element_by_id("logo_small").click() + assert driver.find_element_by_id("private-sketches-counter").text=="2" + assert driver.find_element_by_id("public-sketches-counter").text=="2" + assert driver.find_element_by_id("privateProjectAvailableNumber").text=="0" + assert driver.find_element_by_id("available-private-projects-counter").text=="0/2" + assert "Add more"==driver.find_element_by_link_text("Add more").text + + #Private-->Public + driver.find_element_by_link_text("Edit Info").click() + time.sleep(5) + driver.find_element_by_name("edit-sketch-modal-title").click() + driver.find_element_by_id("edit-sketch-modal-action-button").click() + time.sleep(5) + assert driver.find_element_by_id("private-sketches-counter").text=="1" + assert driver.find_element_by_id("public-sketches-counter").text=="3" + + #Public-->Private + driver.find_element_by_link_text("Edit Info").click() + time.sleep(5) + driver.find_element_by_xpath("(//input[@name='edit-sketch-modal-title'])[2]").click() + driver.find_element_by_id("edit-sketch-modal-action-button").click() + time.sleep(5) + assert driver.find_element_by_id("private-sketches-counter").text=="2" + assert driver.find_element_by_id("public-sketches-counter").text=="2" + #for x in range(0, 3): + # driver.find_element_by_css_selector("i.fa.fa-trash").click() + # driver.find_element_by_css_selector("div.modal-footer.delete-sketch-modal-footer > button.btn.delete-sketch-modal-button").click() + #driver.find_element_by_css_selector("div.modal-footer.delete-sketch-modal-footer > button.btn.btn-danger").click() + + + + driver.find_element_by_id("logout").click() + + + + From 8ab2badf3438e6ef855f1d1d75ad2b543e9c1725 Mon Sep 17 00:00:00 2001 From: Penelope Zisimopoulou Date: Mon, 27 Jun 2016 15:22:41 +0300 Subject: [PATCH 02/29] Fix any issues --- .../test_sketches_counters.py | 98 +++++++++---------- 1 file changed, 48 insertions(+), 50 deletions(-) diff --git a/tests/common/sketches_counters/test_sketches_counters.py b/tests/common/sketches_counters/test_sketches_counters.py index dea76a0..e621eb0 100644 --- a/tests/common/sketches_counters/test_sketches_counters.py +++ b/tests/common/sketches_counters/test_sketches_counters.py @@ -3,78 +3,76 @@ from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select -from selenium.common.exceptions import NoSuchElementException -from selenium.common.exceptions import NoAlertPresentException -import unittest, time, re +from codebender_testing import config +from codebender_testing.config import STAGING_SITE_URL +import os +import time +import pytest class TestSketchesCounters(SeleniumTestCase): - def test_sketches_counters(self): - self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) - self.base_url = "https://staging.codebender.cc/" - self.verificationErrors = [] - self.accept_next_alert = True driver = self.driver - driver.get(self.base_url + "/") + self.open("/") + + #Login and visit the new home page. + credentials = { + 'username': os.environ.get('CODEBENDER_TEST_USER'), + 'password': os.environ.get('CODEBENDER_TEST_PASS'), + } driver.find_element_by_id("login_btn").click() driver.find_element_by_id("username").clear() - driver.find_element_by_id("username").send_keys("demo_user") - driver.find_element_by_id("password").clear() - driver.find_element_by_id("password").send_keys("testerPASS") + driver.find_element_by_id("username").send_keys(credentials['username']) + driver.find_element_by_id("password").clear() + driver.find_element_by_id("password").send_keys(credentials['password']) driver.find_element_by_id("_submit").click() - driver.find_element_by_id("create_sketch_btn").click() + #check that there are not any sketches. + assert driver.find_element_by_id("private-sketches-counter").text == "0" + assert driver.find_element_by_id("public-sketches-counter").text == "0" + #Create 2 public sketches and Create 2 private sketches + driver.find_element_by_id("create_sketch_btn").click() driver.find_element_by_id("create-sketch-modal-action-button").click() - time.sleep(5) + self.get_element(By.ID, "save") driver.find_element_by_id("logo_small").click() driver.find_element_by_id("create_sketch_btn").click() driver.find_element_by_id("create-sketch-modal-action-button").click() - time.sleep(5) - driver.find_element_by_id("logo_small").click() + self.get_element(By.ID, "save") + driver.find_element_by_id("logo_small").click() driver.find_element_by_id("create_sketch_btn").click() driver.find_element_by_xpath("(//input[@name='create-sketch-modal-title'])[2]").click() driver.find_element_by_id("create-sketch-modal-action-button").click() - time.sleep(5) - driver.find_element_by_id("logo_small").click() + self.get_element(By.ID, "save") + driver.find_element_by_id("logo_small").click() driver.find_element_by_id("create_sketch_btn").click() driver.find_element_by_xpath("(//input[@name='create-sketch-modal-title'])[2]").click() driver.find_element_by_id("create-sketch-modal-action-button").click() - time.sleep(5) - driver.find_element_by_id("logo_small").click() - assert driver.find_element_by_id("private-sketches-counter").text=="2" - assert driver.find_element_by_id("public-sketches-counter").text=="2" - assert driver.find_element_by_id("privateProjectAvailableNumber").text=="0" - assert driver.find_element_by_id("available-private-projects-counter").text=="0/2" - assert "Add more"==driver.find_element_by_link_text("Add more").text - - #Private-->Public - driver.find_element_by_link_text("Edit Info").click() - time.sleep(5) - driver.find_element_by_name("edit-sketch-modal-title").click() - driver.find_element_by_id("edit-sketch-modal-action-button").click() - time.sleep(5) - assert driver.find_element_by_id("private-sketches-counter").text=="1" - assert driver.find_element_by_id("public-sketches-counter").text=="3" - - #Public-->Private - driver.find_element_by_link_text("Edit Info").click() - time.sleep(5) - driver.find_element_by_xpath("(//input[@name='edit-sketch-modal-title'])[2]").click() - driver.find_element_by_id("edit-sketch-modal-action-button").click() - time.sleep(5) - assert driver.find_element_by_id("private-sketches-counter").text=="2" - assert driver.find_element_by_id("public-sketches-counter").text=="2" - #for x in range(0, 3): - # driver.find_element_by_css_selector("i.fa.fa-trash").click() - # driver.find_element_by_css_selector("div.modal-footer.delete-sketch-modal-footer > button.btn.delete-sketch-modal-button").click() - #driver.find_element_by_css_selector("div.modal-footer.delete-sketch-modal-footer > button.btn.btn-danger").click() + self.get_element(By.ID, "save") + driver.find_element_by_id("logo_small").click() + #Check that the counters have the correct value. + assert driver.find_element_by_id("private-sketches-counter").text == "2" + assert driver.find_element_by_id("public-sketches-counter").text == "2" + #Check that the counter for private projects also appears at the Badges section and has the correct value. + assert driver.find_element_by_id("privateProjectAvailableNumber").text == "0" + assert driver.find_element_by_id("available-private-projects-counter").text == "0/2" - driver.find_element_by_id("logout").click() - - + #Check that if your account has private projects (e.g. 2) and all yor projects are public,counter for available private sketches should be 0/number of total private sketches(e.g.0/2) and the link to the private sketches should be Add more. + assert "Add more" == driver.find_element_by_link_text("Add more").text +class TestDeleteAllSketches(SeleniumTestCase): + @pytest.mark.requires_url(STAGING_SITE_URL) + def test_delete(self, tester_login): + try: + sketches = self.find_all('#project_list > li .sketch-block-title > a') + projects = [] + for sketch in sketches: + projects.append(sketch.text) + for project in projects: + self.delete_project(project) + except: + print 'No sketches found' + self.logout() From a9fdec2ffb456f78dd0743496f27ac72c0bcb065 Mon Sep 17 00:00:00 2001 From: Penelope Zisimopoulou Date: Tue, 28 Jun 2016 14:56:58 +0300 Subject: [PATCH 03/29] Updated script-Added new steps --- tests/common/sketches_counters/Readme.txt | 26 ---- .../test_sketches_counters.py | 130 ++++++++++++++++-- 2 files changed, 118 insertions(+), 38 deletions(-) delete mode 100644 tests/common/sketches_counters/Readme.txt diff --git a/tests/common/sketches_counters/Readme.txt b/tests/common/sketches_counters/Readme.txt deleted file mode 100644 index da7c919..0000000 --- a/tests/common/sketches_counters/Readme.txt +++ /dev/null @@ -1,26 +0,0 @@ -Pull Request: -https://github.com/codebendercc/codebender.cc/pull/676 - -Selenium_Test_Script - -Homepage Test Caces: -test_sketches_counters.py : Check that the counters of the sketches are correct. - - -Login and visit the new home page. -Create 2 public sketches -Create 2 private sketches -Check that when the page loads, the loading screen appears and message "Loading the Sketches, please wait" is displayed. -Check that the counters: - Public sketches (blue) have the correct value. - Private sketches (purple) have the correct value. -Check that the counter for private projects also appears at the Badges section and has the correct value. -Check that if your account has private projects (e.g. 2) and all yor projects are public, counter for available private sketches should be 0/number of total private sketches(e.g. 0/2) and the link to the private sketches should be Add more. - -Check that the number of private projects available is updated each time that you make a change (e.g from private to public and vice versa). - Change the privite sketch to public - Change the public to private - - - - diff --git a/tests/common/sketches_counters/test_sketches_counters.py b/tests/common/sketches_counters/test_sketches_counters.py index e621eb0..a269224 100644 --- a/tests/common/sketches_counters/test_sketches_counters.py +++ b/tests/common/sketches_counters/test_sketches_counters.py @@ -5,20 +5,21 @@ from selenium.webdriver.support.ui import Select from codebender_testing import config from codebender_testing.config import STAGING_SITE_URL +from selenium.webdriver.common.action_chains import ActionChains import os import time import pytest class TestSketchesCounters(SeleniumTestCase): + def test_sketches_counters(self): self.driver.implicitly_wait(30) driver = self.driver self.open("/") - #Login and visit the new home page. credentials = { - 'username': os.environ.get('CODEBENDER_TEST_USER'), - 'password': os.environ.get('CODEBENDER_TEST_PASS'), + 'username': os.environ.get('CODEBENDER_TEST_USER'), + 'password': os.environ.get('CODEBENDER_TEST_PASS'), } driver.find_element_by_id("login_btn").click() driver.find_element_by_id("username").clear() @@ -27,9 +28,8 @@ def test_sketches_counters(self): driver.find_element_by_id("password").send_keys(credentials['password']) driver.find_element_by_id("_submit").click() - #check that there are not any sketches. - assert driver.find_element_by_id("private-sketches-counter").text == "0" - assert driver.find_element_by_id("public-sketches-counter").text == "0" + assert driver.find_element_by_id("private-sketches-counter").text=="0" + assert driver.find_element_by_id("public-sketches-counter").text=="0" #Create 2 public sketches and Create 2 private sketches driver.find_element_by_id("create_sketch_btn").click() @@ -52,16 +52,98 @@ def test_sketches_counters(self): driver.find_element_by_id("logo_small").click() #Check that the counters have the correct value. - assert driver.find_element_by_id("private-sketches-counter").text == "2" - assert driver.find_element_by_id("public-sketches-counter").text == "2" + assert driver.find_element_by_id("private-sketches-counter").text=="2" + assert driver.find_element_by_id("public-sketches-counter").text=="2" - #Check that the counter for private projects also appears at the Badges section and has the correct value. - assert driver.find_element_by_id("privateProjectAvailableNumber").text == "0" - assert driver.find_element_by_id("available-private-projects-counter").text == "0/2" + #Check that the counter for private projects also appears at the Badges section and has the correct value. + assert driver.find_element_by_id("privateProjectAvailableNumber").text=="0" + assert driver.find_element_by_id("available-private-projects-counter").text=="0/2" - #Check that if your account has private projects (e.g. 2) and all yor projects are public,counter for available private sketches should be 0/number of total private sketches(e.g.0/2) and the link to the private sketches should be Add more. + #Check that if your account has private projects (e.g. 2) and all yor projects are public, counter for available private sketches should be 0/number of total private sketches(e.g. 0/2) and the link to the private sketches should be Add more. assert "Add more" == driver.find_element_by_link_text("Add more").text + #Check that All, Public and Private buttons work, clicking on each of them and verifying + #that the correct number of sketches is viewed each time + #Check "All button" + self.get_element(By.XPATH, "//div[@id='filter-options']/label[2]").click() + sketches = self.find_all('#project_list >li') + assert len(sketches) == 4 + #Check "Public button" + self.get_element(By.XPATH, "//div[@id='filter-options']/label[2]").click() + sketches = self.find_all('#project_list >li .cb-icon-globe-inv') + assert len(sketches) == 2 + #Check "Private button" + self.get_element(By.XPATH, "//div[@id='filter-options']/label[3]").click() + sketches = self.find_all('#project_list >li .fa-lock') + assert len(sketches) == 2 + self.get_element(By.XPATH, "//div[@id='filter-options']/label[2]").click() + + #ToDo Check that the number of private projects available is updated each time that you make a change (e.g from private to public and vice versa). + + #Check that the counter for available private sketches also appears at the upload sketch modal (ino, zip, multiple zip) and at the create and edit sketch modal. + self.get_element(By.ID, "sketch-upload-button").click() + self.get_element(By.ID, "upload-sketch-ino").click() + assert self.get_element(By.ID, "upload-sketch-modal-available-private-projects").text == "0/2" + driver.find_element_by_xpath("//div[4]/div[3]/button").click() + + self.get_element(By.ID, "sketch-upload-button").click() + self.get_element(By.ID, "upload-sketch-zip").click() + assert self.get_element(By.ID, "upload-sketch-modal-available-private-projects").text == "0/2" + driver.find_element_by_xpath("//div[4]/div[3]/button").click() + + self.get_element(By.ID, "sketch-upload-button").click() + self.get_element(By.ID, "upload-sketch-folder-zip").click() + assert self.get_element(By.ID, "upload-sketch-modal-available-private-projects").text == "0/2" + driver.find_element_by_xpath("//div[4]/div[3]/button").click() + + self.get_element(By.ID, "create_sketch_btn").click() + assert self.get_element(By.ID, "create-sketch-modal-available-private-projects").text == "0/2" + driver.find_element_by_xpath("//button[2]").click() + + #Open the create sketch modal and try to create a new project without providing a name. + #The Create button should be disabled. + self.get_element(By.ID, "create_sketch_btn").click() + self.get_element(By.ID, "create-sketch-name").clear() + self.get_element(By.ID, "create-sketch-name").send_keys(Keys.CONTROL + "a") + self.get_element(By.ID, "create-sketch-name").send_keys(Keys.DELETE) + assert not self.get_element(By.ID, "create-sketch-modal-action-button").is_enabled() + driver.find_element_by_xpath("//button[2]").click() + + + #Check that sketch name is auto-generated as: Untitled Sketch CURRENT_DATE. + self.get_element(By.ID, "create_sketch_btn").click() + current_date_text= "Untitled Sketch " + time.strftime("%Y-%m-%d") + assert self.get_element(By.ID, "create-sketch-name").get_attribute("value") == current_date_text + driver.find_element_by_xpath("//button[2]").click() + + #Check that when you create the sketch you are redirected into the editor. + self.get_element(By.ID, "create_sketch_btn").click() + self.get_element(By.ID, "create-sketch-modal-action-button").click() + self.get_element(By.ID, "cb_cf_flash_btn") + self.get_element(By.ID, "logo_small").click() + + #Check that short description + #Write short description with 17 characters + self.get_element(By.ID, "create_sketch_btn").click() + self.get_element(By.ID, "create-sketch-modal-sort-description").click() + self.get_element(By.ID, "create-sketch-modal-sort-description").send_keys("short description") + assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").text == "123" + driver.find_element_by_xpath("//button[2]").click() + + #Write short description with 140 characters + self.get_element(By.ID, "create_sketch_btn").click() + self.get_element(By.ID, "create-sketch-modal-sort-description").click() + self.get_element(By.ID, "create-sketch-modal-sort-description").send_keys("shortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescrip") + assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").text == "0" + driver.find_element_by_xpath("//button[2]").click() + + #Write short description with 153 characters + self.get_element(By.ID, "create_sketch_btn").click() + self.get_element(By.ID, "create-sketch-modal-sort-description").click() + self.get_element(By.ID, "create-sketch-modal-sort-description").send_keys("short descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort description") + assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").text == "-13" + driver.find_element_by_xpath("//button[2]").click() + class TestDeleteAllSketches(SeleniumTestCase): @pytest.mark.requires_url(STAGING_SITE_URL) @@ -75,4 +157,28 @@ def test_delete(self, tester_login): self.delete_project(project) except: print 'No sketches found' + + #Create Clone + self.get_element(By.ID,"create_sketch_btn").click() + self.get_element(By.ID,"create-sketch-modal-action-button").click() + self.get_element(By.ID, "save") + self.get_element(By.ID,"logo_small").click() + self.get_element(By.XPATH, "//div[4]/a[2]/i").click() + self.get_element(By.ID, "save") + self.get_element(By.ID,"logo_small").click() + +class TestDeleteAllSketches(SeleniumTestCase): + + @pytest.mark.requires_url(STAGING_SITE_URL) + def test_delete(self, tester_login): + try: + sketches = self.find_all('#project_list > li .sketch-block-title > a') + projects = [] + for sketch in sketches: + projects.append(sketch.text) + for project in projects: + self.delete_project(project) + except: + print 'No sketches found' + self.logout() From 8e68b45e3d283c8a46c9dff3668d8a4c0f1a75f1 Mon Sep 17 00:00:00 2001 From: Penelope Zisimopoulou Date: Thu, 30 Jun 2016 16:42:23 +0300 Subject: [PATCH 04/29] Added new script for editor test cases --- .../test_inside_sketch_block.py | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tests/common/sketches_counters/test_inside_sketch_block.py diff --git a/tests/common/sketches_counters/test_inside_sketch_block.py b/tests/common/sketches_counters/test_inside_sketch_block.py new file mode 100644 index 0000000..1cd6c96 --- /dev/null +++ b/tests/common/sketches_counters/test_inside_sketch_block.py @@ -0,0 +1,56 @@ +from codebender_testing.utils import SeleniumTestCase +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys +from selenium.webdriver.support.ui import Select +from codebender_testing import config +from codebender_testing.config import STAGING_SITE_URL +import os +import time +import pytest + +class TestSketchesCounters(SeleniumTestCase): + + def test_sketches_counters(self): + self.driver.implicitly_wait(30) + driver = self.driver + self.open("/") + #Login and visit the new home page. + credentials = { + 'username': os.environ.get('CODEBENDER_TEST_USER'), + 'password': os.environ.get('CODEBENDER_TEST_PASS'), + } + driver.find_element_by_id("login_btn").click() + driver.find_element_by_id("username").clear() + driver.find_element_by_id("username").send_keys(credentials['username']) + driver.find_element_by_id("password").clear() + driver.find_element_by_id("password").send_keys(credentials['password']) + driver.find_element_by_id("_submit").click() + + assert driver.find_element_by_id("private-sketches-counter").text=="0" + assert driver.find_element_by_id("public-sketches-counter").text=="0" + + #Create 1 public sketches + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_id("create-sketch-modal-action-button").click() + self.get_element(By.ID, "save") + driver.find_element_by_id("logo_small").click() + + #Check that the sketch was created + assert driver.find_element_by_id("public-sketches-counter").text=="1" + +class TestDeleteAllSketches(SeleniumTestCase): + + @pytest.mark.requires_url(STAGING_SITE_URL) + def test_delete(self, tester_login): + try: + sketches = self.find_all('#project_list > li .sketch-block-title > a') + projects = [] + for sketch in sketches: + projects.append(sketch.text) + for project in projects: + self.delete_project(project) + except: + print 'No sketches found' + + self.logout() From e9560a48c21ed00334223405a8136ea749fa5fff Mon Sep 17 00:00:00 2001 From: Penelope Zisimopoulou Date: Thu, 30 Jun 2016 16:45:59 +0300 Subject: [PATCH 05/29] Added new steps --- .../test_inside_sketch_block.py | 67 ++++++- .../test_sketches_counters.py | 184 ------------------ 2 files changed, 65 insertions(+), 186 deletions(-) delete mode 100644 tests/common/sketches_counters/test_sketches_counters.py diff --git a/tests/common/sketches_counters/test_inside_sketch_block.py b/tests/common/sketches_counters/test_inside_sketch_block.py index 1cd6c96..b1fd2a8 100644 --- a/tests/common/sketches_counters/test_inside_sketch_block.py +++ b/tests/common/sketches_counters/test_inside_sketch_block.py @@ -27,7 +27,6 @@ def test_sketches_counters(self): driver.find_element_by_id("password").send_keys(credentials['password']) driver.find_element_by_id("_submit").click() - assert driver.find_element_by_id("private-sketches-counter").text=="0" assert driver.find_element_by_id("public-sketches-counter").text=="0" #Create 1 public sketches @@ -35,10 +34,74 @@ def test_sketches_counters(self): driver.find_element_by_id("create-sketch-modal-action-button").click() self.get_element(By.ID, "save") driver.find_element_by_id("logo_small").click() - #Check that the sketch was created assert driver.find_element_by_id("public-sketches-counter").text=="1" + #Check that when you click on the sketch, sketch opens in editor. + driver.find_element_by_xpath("//li/div/div/div[2]/a").click() + assert self.get_element(By.ID, "cb_cf_flash_btn").text == "Run on Arduino" + self.get_element(By.ID, "logo_small").click() + #ToDo + #Create a sketch using the Create button and go back to homepage. + #Sketch should say Created instead of Modified. + #Go back to the sketch previously created and do some changes. + #Save it and go back to homepage. Sketch should say Modified instead of Created. + + #Check the Share button. + driver.find_element_by_xpath("//div[4]/a/i").click() + driver.find_element_by_link_text("Share").click() + driver.find_element_by_link_text("Embed").click() + driver.find_element_by_link_text("Share").click() + self.get_element(By.XPATH, "//div[@id='share-modal']/div/button").click() + + #Check that the file list of the sketch is at the bottom of the sketch block. + driver.find_element_by_id("newfile").click() + driver.find_element_by_id("createfield").clear() + driver.find_element_by_id("createfield").send_keys("test.h") + self.get_element(By.ID, "createbutton").click() + assert self.get_element(By.ID, "operation_output").text == "File successfully created." + driver.find_element_by_id("logo_small").click() + + #Create Clone + driver.find_element_by_xpath("//div[4]/a[2]/i").click() + driver.find_element_by_id("save").click() + driver.find_element_by_id("logo_small").click() + driver.find_element_by_xpath("//li/div/div/div[2]/a").click() + driver.find_element_by_id("logo_small").click() + + #Check that when a sketch has a short description, it appears at the section below the name, + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_id("create-sketch-modal-short-description").clear() + driver.find_element_by_id("create-sketch-modal-short-description").send_keys("Test") + driver.find_element_by_id("create-sketch-modal-action-button").click() + assert self.get_element(By.ID, "short-description").text == "Test" + + #Ckeck that when a sketch has a short description does not appear at all. + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_id("create-sketch-modal-short-description").clear() + driver.find_element_by_id("create-sketch-modal-short-description").send_keys("TestTestTestTestTestTestTestTestTestTest") + driver.find_element_by_id("create-sketch-modal-action-button").click() + assert self.get_element(By.ID, "short-description").text == "TestTestTestTestTestTestTestTestTestTest" + driver.find_element_by_id("logo_small").click() + + #Check the delete sketch fuction. + driver.find_element_by_xpath("//li[2]/div/div/div[4]/a[3]/i").click() + driver.find_element_by_xpath("//div[4]/button").click() + driver.find_element_by_xpath("//div[4]/button[2]").click() + + #Check the clone sketch function. + #Click on Clone button and check that the sketch is cloned and opens in editor. + + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_id("create-sketch-modal-action-button").click() + driver.find_element_by_id("save").click() + driver.find_element_by_id("logo_small").click() + driver.find_element_by_xpath("//li/div/div/div[2]/a").click() + driver.find_element_by_id("clone_btn").click() + driver.find_element_by_id("save").click() + driver.find_element_by_id("logo_small").click() + + class TestDeleteAllSketches(SeleniumTestCase): @pytest.mark.requires_url(STAGING_SITE_URL) diff --git a/tests/common/sketches_counters/test_sketches_counters.py b/tests/common/sketches_counters/test_sketches_counters.py deleted file mode 100644 index a269224..0000000 --- a/tests/common/sketches_counters/test_sketches_counters.py +++ /dev/null @@ -1,184 +0,0 @@ -from codebender_testing.utils import SeleniumTestCase -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import Select -from codebender_testing import config -from codebender_testing.config import STAGING_SITE_URL -from selenium.webdriver.common.action_chains import ActionChains -import os -import time -import pytest - -class TestSketchesCounters(SeleniumTestCase): - - def test_sketches_counters(self): - self.driver.implicitly_wait(30) - driver = self.driver - self.open("/") - #Login and visit the new home page. - credentials = { - 'username': os.environ.get('CODEBENDER_TEST_USER'), - 'password': os.environ.get('CODEBENDER_TEST_PASS'), - } - driver.find_element_by_id("login_btn").click() - driver.find_element_by_id("username").clear() - driver.find_element_by_id("username").send_keys(credentials['username']) - driver.find_element_by_id("password").clear() - driver.find_element_by_id("password").send_keys(credentials['password']) - driver.find_element_by_id("_submit").click() - - assert driver.find_element_by_id("private-sketches-counter").text=="0" - assert driver.find_element_by_id("public-sketches-counter").text=="0" - - #Create 2 public sketches and Create 2 private sketches - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_id("create-sketch-modal-action-button").click() - self.get_element(By.ID, "save") - driver.find_element_by_id("logo_small").click() - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_id("create-sketch-modal-action-button").click() - self.get_element(By.ID, "save") - driver.find_element_by_id("logo_small").click() - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_xpath("(//input[@name='create-sketch-modal-title'])[2]").click() - driver.find_element_by_id("create-sketch-modal-action-button").click() - self.get_element(By.ID, "save") - driver.find_element_by_id("logo_small").click() - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_xpath("(//input[@name='create-sketch-modal-title'])[2]").click() - driver.find_element_by_id("create-sketch-modal-action-button").click() - self.get_element(By.ID, "save") - driver.find_element_by_id("logo_small").click() - - #Check that the counters have the correct value. - assert driver.find_element_by_id("private-sketches-counter").text=="2" - assert driver.find_element_by_id("public-sketches-counter").text=="2" - - #Check that the counter for private projects also appears at the Badges section and has the correct value. - assert driver.find_element_by_id("privateProjectAvailableNumber").text=="0" - assert driver.find_element_by_id("available-private-projects-counter").text=="0/2" - - #Check that if your account has private projects (e.g. 2) and all yor projects are public, counter for available private sketches should be 0/number of total private sketches(e.g. 0/2) and the link to the private sketches should be Add more. - assert "Add more" == driver.find_element_by_link_text("Add more").text - - #Check that All, Public and Private buttons work, clicking on each of them and verifying - #that the correct number of sketches is viewed each time - #Check "All button" - self.get_element(By.XPATH, "//div[@id='filter-options']/label[2]").click() - sketches = self.find_all('#project_list >li') - assert len(sketches) == 4 - #Check "Public button" - self.get_element(By.XPATH, "//div[@id='filter-options']/label[2]").click() - sketches = self.find_all('#project_list >li .cb-icon-globe-inv') - assert len(sketches) == 2 - #Check "Private button" - self.get_element(By.XPATH, "//div[@id='filter-options']/label[3]").click() - sketches = self.find_all('#project_list >li .fa-lock') - assert len(sketches) == 2 - self.get_element(By.XPATH, "//div[@id='filter-options']/label[2]").click() - - #ToDo Check that the number of private projects available is updated each time that you make a change (e.g from private to public and vice versa). - - #Check that the counter for available private sketches also appears at the upload sketch modal (ino, zip, multiple zip) and at the create and edit sketch modal. - self.get_element(By.ID, "sketch-upload-button").click() - self.get_element(By.ID, "upload-sketch-ino").click() - assert self.get_element(By.ID, "upload-sketch-modal-available-private-projects").text == "0/2" - driver.find_element_by_xpath("//div[4]/div[3]/button").click() - - self.get_element(By.ID, "sketch-upload-button").click() - self.get_element(By.ID, "upload-sketch-zip").click() - assert self.get_element(By.ID, "upload-sketch-modal-available-private-projects").text == "0/2" - driver.find_element_by_xpath("//div[4]/div[3]/button").click() - - self.get_element(By.ID, "sketch-upload-button").click() - self.get_element(By.ID, "upload-sketch-folder-zip").click() - assert self.get_element(By.ID, "upload-sketch-modal-available-private-projects").text == "0/2" - driver.find_element_by_xpath("//div[4]/div[3]/button").click() - - self.get_element(By.ID, "create_sketch_btn").click() - assert self.get_element(By.ID, "create-sketch-modal-available-private-projects").text == "0/2" - driver.find_element_by_xpath("//button[2]").click() - - #Open the create sketch modal and try to create a new project without providing a name. - #The Create button should be disabled. - self.get_element(By.ID, "create_sketch_btn").click() - self.get_element(By.ID, "create-sketch-name").clear() - self.get_element(By.ID, "create-sketch-name").send_keys(Keys.CONTROL + "a") - self.get_element(By.ID, "create-sketch-name").send_keys(Keys.DELETE) - assert not self.get_element(By.ID, "create-sketch-modal-action-button").is_enabled() - driver.find_element_by_xpath("//button[2]").click() - - - #Check that sketch name is auto-generated as: Untitled Sketch CURRENT_DATE. - self.get_element(By.ID, "create_sketch_btn").click() - current_date_text= "Untitled Sketch " + time.strftime("%Y-%m-%d") - assert self.get_element(By.ID, "create-sketch-name").get_attribute("value") == current_date_text - driver.find_element_by_xpath("//button[2]").click() - - #Check that when you create the sketch you are redirected into the editor. - self.get_element(By.ID, "create_sketch_btn").click() - self.get_element(By.ID, "create-sketch-modal-action-button").click() - self.get_element(By.ID, "cb_cf_flash_btn") - self.get_element(By.ID, "logo_small").click() - - #Check that short description - #Write short description with 17 characters - self.get_element(By.ID, "create_sketch_btn").click() - self.get_element(By.ID, "create-sketch-modal-sort-description").click() - self.get_element(By.ID, "create-sketch-modal-sort-description").send_keys("short description") - assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").text == "123" - driver.find_element_by_xpath("//button[2]").click() - - #Write short description with 140 characters - self.get_element(By.ID, "create_sketch_btn").click() - self.get_element(By.ID, "create-sketch-modal-sort-description").click() - self.get_element(By.ID, "create-sketch-modal-sort-description").send_keys("shortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescrip") - assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").text == "0" - driver.find_element_by_xpath("//button[2]").click() - - #Write short description with 153 characters - self.get_element(By.ID, "create_sketch_btn").click() - self.get_element(By.ID, "create-sketch-modal-sort-description").click() - self.get_element(By.ID, "create-sketch-modal-sort-description").send_keys("short descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort description") - assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").text == "-13" - driver.find_element_by_xpath("//button[2]").click() - -class TestDeleteAllSketches(SeleniumTestCase): - - @pytest.mark.requires_url(STAGING_SITE_URL) - def test_delete(self, tester_login): - try: - sketches = self.find_all('#project_list > li .sketch-block-title > a') - projects = [] - for sketch in sketches: - projects.append(sketch.text) - for project in projects: - self.delete_project(project) - except: - print 'No sketches found' - - #Create Clone - self.get_element(By.ID,"create_sketch_btn").click() - self.get_element(By.ID,"create-sketch-modal-action-button").click() - self.get_element(By.ID, "save") - self.get_element(By.ID,"logo_small").click() - self.get_element(By.XPATH, "//div[4]/a[2]/i").click() - self.get_element(By.ID, "save") - self.get_element(By.ID,"logo_small").click() - -class TestDeleteAllSketches(SeleniumTestCase): - - @pytest.mark.requires_url(STAGING_SITE_URL) - def test_delete(self, tester_login): - try: - sketches = self.find_all('#project_list > li .sketch-block-title > a') - projects = [] - for sketch in sketches: - projects.append(sketch.text) - for project in projects: - self.delete_project(project) - except: - print 'No sketches found' - - self.logout() From c36d6bf252b63c4871b65c57c3cf0178fe62d654 Mon Sep 17 00:00:00 2001 From: Penelope Zisimopoulou Date: Fri, 1 Jul 2016 15:46:50 +0300 Subject: [PATCH 06/29] Added news steps --- .../test_inside_sketch_block.py | 119 ------------------ 1 file changed, 119 deletions(-) delete mode 100644 tests/common/sketches_counters/test_inside_sketch_block.py diff --git a/tests/common/sketches_counters/test_inside_sketch_block.py b/tests/common/sketches_counters/test_inside_sketch_block.py deleted file mode 100644 index b1fd2a8..0000000 --- a/tests/common/sketches_counters/test_inside_sketch_block.py +++ /dev/null @@ -1,119 +0,0 @@ -from codebender_testing.utils import SeleniumTestCase -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import Select -from codebender_testing import config -from codebender_testing.config import STAGING_SITE_URL -import os -import time -import pytest - -class TestSketchesCounters(SeleniumTestCase): - - def test_sketches_counters(self): - self.driver.implicitly_wait(30) - driver = self.driver - self.open("/") - #Login and visit the new home page. - credentials = { - 'username': os.environ.get('CODEBENDER_TEST_USER'), - 'password': os.environ.get('CODEBENDER_TEST_PASS'), - } - driver.find_element_by_id("login_btn").click() - driver.find_element_by_id("username").clear() - driver.find_element_by_id("username").send_keys(credentials['username']) - driver.find_element_by_id("password").clear() - driver.find_element_by_id("password").send_keys(credentials['password']) - driver.find_element_by_id("_submit").click() - - assert driver.find_element_by_id("public-sketches-counter").text=="0" - - #Create 1 public sketches - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_id("create-sketch-modal-action-button").click() - self.get_element(By.ID, "save") - driver.find_element_by_id("logo_small").click() - #Check that the sketch was created - assert driver.find_element_by_id("public-sketches-counter").text=="1" - - #Check that when you click on the sketch, sketch opens in editor. - driver.find_element_by_xpath("//li/div/div/div[2]/a").click() - assert self.get_element(By.ID, "cb_cf_flash_btn").text == "Run on Arduino" - self.get_element(By.ID, "logo_small").click() - #ToDo - #Create a sketch using the Create button and go back to homepage. - #Sketch should say Created instead of Modified. - #Go back to the sketch previously created and do some changes. - #Save it and go back to homepage. Sketch should say Modified instead of Created. - - #Check the Share button. - driver.find_element_by_xpath("//div[4]/a/i").click() - driver.find_element_by_link_text("Share").click() - driver.find_element_by_link_text("Embed").click() - driver.find_element_by_link_text("Share").click() - self.get_element(By.XPATH, "//div[@id='share-modal']/div/button").click() - - #Check that the file list of the sketch is at the bottom of the sketch block. - driver.find_element_by_id("newfile").click() - driver.find_element_by_id("createfield").clear() - driver.find_element_by_id("createfield").send_keys("test.h") - self.get_element(By.ID, "createbutton").click() - assert self.get_element(By.ID, "operation_output").text == "File successfully created." - driver.find_element_by_id("logo_small").click() - - #Create Clone - driver.find_element_by_xpath("//div[4]/a[2]/i").click() - driver.find_element_by_id("save").click() - driver.find_element_by_id("logo_small").click() - driver.find_element_by_xpath("//li/div/div/div[2]/a").click() - driver.find_element_by_id("logo_small").click() - - #Check that when a sketch has a short description, it appears at the section below the name, - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_id("create-sketch-modal-short-description").clear() - driver.find_element_by_id("create-sketch-modal-short-description").send_keys("Test") - driver.find_element_by_id("create-sketch-modal-action-button").click() - assert self.get_element(By.ID, "short-description").text == "Test" - - #Ckeck that when a sketch has a short description does not appear at all. - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_id("create-sketch-modal-short-description").clear() - driver.find_element_by_id("create-sketch-modal-short-description").send_keys("TestTestTestTestTestTestTestTestTestTest") - driver.find_element_by_id("create-sketch-modal-action-button").click() - assert self.get_element(By.ID, "short-description").text == "TestTestTestTestTestTestTestTestTestTest" - driver.find_element_by_id("logo_small").click() - - #Check the delete sketch fuction. - driver.find_element_by_xpath("//li[2]/div/div/div[4]/a[3]/i").click() - driver.find_element_by_xpath("//div[4]/button").click() - driver.find_element_by_xpath("//div[4]/button[2]").click() - - #Check the clone sketch function. - #Click on Clone button and check that the sketch is cloned and opens in editor. - - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_id("create-sketch-modal-action-button").click() - driver.find_element_by_id("save").click() - driver.find_element_by_id("logo_small").click() - driver.find_element_by_xpath("//li/div/div/div[2]/a").click() - driver.find_element_by_id("clone_btn").click() - driver.find_element_by_id("save").click() - driver.find_element_by_id("logo_small").click() - - -class TestDeleteAllSketches(SeleniumTestCase): - - @pytest.mark.requires_url(STAGING_SITE_URL) - def test_delete(self, tester_login): - try: - sketches = self.find_all('#project_list > li .sketch-block-title > a') - projects = [] - for sketch in sketches: - projects.append(sketch.text) - for project in projects: - self.delete_project(project) - except: - print 'No sketches found' - - self.logout() From a331a1f4b0e6725f73299ea39873b8e8845961cd Mon Sep 17 00:00:00 2001 From: Penelope Zisimopoulou Date: Mon, 4 Jul 2016 09:37:40 +0300 Subject: [PATCH 07/29] Adding the correct file --- tests/common/sketches_counters/test_editor.py | 110 +++++++++ .../test_inside_sketch_block.py | 115 ++++++++++ .../test_sketches_counters.py | 211 ++++++++++++++++++ 3 files changed, 436 insertions(+) create mode 100644 tests/common/sketches_counters/test_editor.py create mode 100644 tests/common/sketches_counters/test_inside_sketch_block.py create mode 100644 tests/common/sketches_counters/test_sketches_counters.py diff --git a/tests/common/sketches_counters/test_editor.py b/tests/common/sketches_counters/test_editor.py new file mode 100644 index 0000000..70bf063 --- /dev/null +++ b/tests/common/sketches_counters/test_editor.py @@ -0,0 +1,110 @@ +from codebender_testing.utils import SeleniumTestCase +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys +from selenium.webdriver.support.ui import Select +from codebender_testing import config +from codebender_testing.config import STAGING_SITE_URL +from selenium.webdriver.common.action_chains import ActionChains +import os +import time +import pytest + +class TestEditor(SeleniumTestCase): + + def test_editor(self): + self.driver.implicitly_wait(30) + driver = self.driver + self.open("/") + #Login and visit the new home page. + credentials = { + 'username': os.environ.get('CODEBENDER_TEST_USER'), + 'password': os.environ.get('CODEBENDER_TEST_PASS'), + } + driver.find_element_by_id("login_btn").click() + driver.find_element_by_id("username").clear() + driver.find_element_by_id("username").send_keys(credentials['username']) + driver.find_element_by_id("password").clear() + driver.find_element_by_id("password").send_keys(credentials['password']) + driver.find_element_by_id("_submit").click() + + assert driver.find_element_by_id("private-sketches-counter").text=="0" + assert driver.find_element_by_id("public-sketches-counter").text=="0" + + #Create 1 public sketches + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_id("create-sketch-modal-action-button").click() + self.get_element(By.ID, "save") + driver.find_element_by_id("logo_small").click() + + #Check that the sketch was created + assert driver.find_element_by_id("public-sketches-counter").text=="1" + + #Check that when you click on the sketch, sketch opens in editor. + driver.find_element_by_xpath("//li/div/div/div[2]/a").click() + assert self.get_element(By.ID, "cb_cf_flash_btn").text == "Run on Arduino" + + #double click the earth icon on the left of its title to make it private . + #Project privacy settings successfully changed! + changeButton = self.get_element(By.XPATH, "//span[@id='editor_heading_privacy_icon']/i") + actions = ActionChains(driver) + actions.move_to_element(changeButton) + actions.double_click(changeButton) + actions.perform() + self.get_element(By.ID, "logo_small").click() + assert self.get_element(By.ID, "public-sketches-counter").text=="0" + assert self.get_element(By.ID, "private-sketches-counter").text=="1" + + driver.find_element_by_xpath("//li/div/div/div[2]/a").click() + changeButton = self.get_element(By.XPATH, "//span[@id='editor_heading_privacy_icon']/i") + actions = ActionChains(driver) + actions.move_to_element(changeButton) + actions.double_click(changeButton) + actions.perform() + + #Go to a sketch in editor and change the short description + #Rename the sketch from the editor + driver.find_element_by_xpath("//div[2]/a/span").click() + driver.find_element_by_xpath("//div[6]/div[2]/div/div/input").clear() + driver.find_element_by_xpath("//div[6]/div[2]/div/div/input").send_keys("test") + driver.find_element_by_xpath("//div[3]/button[2]").click() + #assert self.get_element(By.XPATH, "//div/pre").text == "Name successfully changed!" + driver.find_element_by_xpath("//div[6]/div/button").click() + + #Go to a sketch in editor and click the Clone button + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_id("create-sketch-modal-action-button").click() + driver.find_element_by_id("logo_small").click() + driver.find_element_by_xpath("//li/div/div/div[2]/a").click() + driver.find_element_by_id("clone_btn").click() + driver.find_element_by_id("logo_small").click() + + #Go to a sketch in editor and add a file/Rename file/delete a file/ + driver.find_element_by_id("newfile").click() + driver.find_element_by_id("createfield").clear() + driver.find_element_by_id("createfield").send_keys("test") + driver.find_element_by_id("createbutton").click() + self.get_element(By.XPATH, "//ul[@id='files_list']/li[2]/a[3]/i").click() + driver.find_element_by_id("newFilename").clear() + driver.find_element_by_id("newFilename").send_keys("testA") + driver.find_element_by_id("renamebutton").click() + self.get_element(By.XPATH, "//ul[@id='files_list']/li[2]/a[2]/i").click() + self.get_element(By.XPATH, "//div[5]/div[3]/a[2]").click() + driver.find_element_by_id("logo_small").click() + +class TestDeleteAllSketches(SeleniumTestCase): + + @pytest.mark.requires_url(STAGING_SITE_URL) + def test_delete(self, tester_login): + try: + sketches = self.find_all('#project_list > li .sketch-block-title > a') + projects = [] + for sketch in sketches: + projects.append(sketch.text) + for project in projects: + self.delete_project(project) + except: + print 'No sketches found' + + + self.logout() diff --git a/tests/common/sketches_counters/test_inside_sketch_block.py b/tests/common/sketches_counters/test_inside_sketch_block.py new file mode 100644 index 0000000..e3a79b8 --- /dev/null +++ b/tests/common/sketches_counters/test_inside_sketch_block.py @@ -0,0 +1,115 @@ +from codebender_testing.utils import SeleniumTestCase +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys +from selenium.webdriver.support.ui import Select +from codebender_testing import config +from codebender_testing.config import STAGING_SITE_URL +import os +import time +import pytest + +class TestInsideSketchBlock(SeleniumTestCase): + + def test_inside_sketch_block(self): + self.driver.implicitly_wait(30) + driver = self.driver + self.open("/") + #Login and visit the new home page. + credentials = { + 'username': os.environ.get('CODEBENDER_TEST_USER'), + 'password': os.environ.get('CODEBENDER_TEST_PASS'), + } + driver.find_element_by_id("login_btn").click() + driver.find_element_by_id("username").clear() + driver.find_element_by_id("username").send_keys(credentials['username']) + driver.find_element_by_id("password").clear() + driver.find_element_by_id("password").send_keys(credentials['password']) + driver.find_element_by_id("_submit").click() + + assert driver.find_element_by_id("public-sketches-counter").text=="0" + + #Create 1 public sketches + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_id("create-sketch-modal-action-button").click() + self.get_element(By.ID, "save") + driver.find_element_by_id("logo_small").click() + #Check that the sketch was created + assert driver.find_element_by_id("public-sketches-counter").text=="1" + + #Check that when you click on the sketch, sketch opens in editor. + #Create a sketch using the Create button and go back to homepage. + #Sketch should say Created instead of Modified. + #Go back to the sketch previously created and do some changes. + #Save it and go back to homepage. Sketch should say Modified instead of Created. + driver.find_element_by_xpath("//li/div/div/div[2]/a").click() + assert self.get_element(By.ID, "cb_cf_flash_btn").text == "Run on Arduino" + self.get_element(By.ID, "logo_small").click() + assert self.get_element(By.XPATH , "//div/a/span").text == "created a few seconds ago" + + driver.find_element_by_xpath("//li/div/div/div[2]/a").click() + self.get_element(By.ID, "save").click() + self.get_element(By.ID, "logo_small").click() + assert self.get_element(By.XPATH , "//div/a/span").text == "modified a few seconds ago" + + #Check the Share button. + driver.find_element_by_xpath("//div[4]/a/i").click() + driver.find_element_by_link_text("Share").click() + driver.find_element_by_link_text("Embed").click() + driver.find_element_by_link_text("Share").click() + assert self.get_element(By.XPATH , "//div[7]/div/h3").text == "Share your Sketch" + self.get_element(By.XPATH, "//div[@id='share-modal']/div/button").click() + + #Check the clone sketch function. + #Click on Clone button and check that the sketch is cloned and opens in editor. + self.get_element(By.XPATH, "//div[4]/a[2]/i").click() + self.get_element(By.ID, "save").click() + self.get_element(By.ID, "logo_small").click() + self.get_element(By.XPATH, "//li/div/div/div[2]/a").click() + self.get_element(By.ID, "logo_small").click() + + #Check that the file list of the sketch is at the bottom of the sketch block. + driver.find_element_by_id("newfile").click() + driver.find_element_by_id("createfield").clear() + driver.find_element_by_id("createfield").send_keys("test.h") + self.get_element(By.ID, "createbutton").click() + assert self.get_element(By.ID, "operation_output").text == "File successfully created." + driver.find_element_by_id("logo_small").click() + + #Check that when a sketch has a short description, it appears at the section below the name, + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_id("create-sketch-modal-short-description").clear() + driver.find_element_by_id("create-sketch-modal-short-description").send_keys("Test") + driver.find_element_by_id("create-sketch-modal-action-button").click() + assert self.get_element(By.ID, "short-description").text == "Test" + + #Ckeck that when a sketch has a short description does not appear at all. + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_id("create-sketch-modal-short-description").clear() + driver.find_element_by_id("create-sketch-modal-short-description").send_keys("TestTestTestTestTestTestTestTestTestTest") + driver.find_element_by_id("create-sketch-modal-action-button").click() + assert self.get_element(By.ID, "short-description").text == "TestTestTestTestTestTestTestTestTestTest" + driver.find_element_by_id("logo_small").click() + + #Check the delete sketch fuction. + driver.find_element_by_xpath("//a[3]/i").click() + #Check that when the sketch is deleted the modal stays open showing the result of the deletion. + assert self.get_element(By.XPATH, "//div[5]/div/h3").text == "Are you sure you want to delete your sketch?" + driver.find_element_by_xpath("//div[4]/button").click() + driver.find_element_by_xpath("//div[4]/button[2]").click() + +class TestDeleteAllSketches(SeleniumTestCase): + + @pytest.mark.requires_url(STAGING_SITE_URL) + def test_delete(self, tester_login): + try: + sketches = self.find_all('#project_list > li .sketch-block-title > a') + projects = [] + for sketch in sketches: + projects.append(sketch.text) + for project in projects: + self.delete_project(project) + except: + print 'No sketches found' + + self.logout() diff --git a/tests/common/sketches_counters/test_sketches_counters.py b/tests/common/sketches_counters/test_sketches_counters.py new file mode 100644 index 0000000..d1fa826 --- /dev/null +++ b/tests/common/sketches_counters/test_sketches_counters.py @@ -0,0 +1,211 @@ +from codebender_testing.utils import SeleniumTestCase +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys +from selenium.webdriver.support.ui import Select +from codebender_testing import config +from codebender_testing.config import STAGING_SITE_URL +from selenium.webdriver.common.action_chains import ActionChains +import os +import time +import pytest + +class TestSketchesCounters(SeleniumTestCase): + + def test_sketches_counters(self): + self.driver.implicitly_wait(30) + driver = self.driver + self.open("/") + #Login and visit the new home page. + credentials = { + 'username': os.environ.get('CODEBENDER_TEST_USER'), + 'password': os.environ.get('CODEBENDER_TEST_PASS'), + } + driver.find_element_by_id("login_btn").click() + driver.find_element_by_id("username").clear() + driver.find_element_by_id("username").send_keys(credentials['username']) + driver.find_element_by_id("password").clear() + driver.find_element_by_id("password").send_keys(credentials['password']) + driver.find_element_by_id("_submit").click() + + assert driver.find_element_by_id("private-sketches-counter").text=="0" + assert driver.find_element_by_id("public-sketches-counter").text=="0" + + #Create 2 public sketches and Create 2 private sketches + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_id("create-sketch-modal-action-button").click() + self.get_element(By.ID, "save") + driver.find_element_by_id("logo_small").click() + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_id("create-sketch-modal-action-button").click() + self.get_element(By.ID, "save") + driver.find_element_by_id("logo_small").click() + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_xpath("(//input[@name='create-sketch-modal-title'])[2]").click() + driver.find_element_by_id("create-sketch-modal-action-button").click() + self.get_element(By.ID, "save") + driver.find_element_by_id("logo_small").click() + driver.find_element_by_id("create_sketch_btn").click() + driver.find_element_by_xpath("(//input[@name='create-sketch-modal-title'])[2]").click() + driver.find_element_by_id("create-sketch-modal-action-button").click() + self.get_element(By.ID, "save") + driver.find_element_by_id("logo_small").click() + + #Check that the counters have the correct value. + assert driver.find_element_by_id("private-sketches-counter").text=="2" + assert driver.find_element_by_id("public-sketches-counter").text=="2" + + #Check that the counter for private projects also appears at the Badges section and has the correct value. + assert driver.find_element_by_id("privateProjectAvailableNumber").text=="0" + assert driver.find_element_by_id("available-private-projects-counter").text=="0/2" + + #Check that if your account has private projects (e.g. 2) and all yor projects are public, counter for available private sketches should be 0/number of total private sketches(e.g. 0/2) and the link to the private sketches should be Add more. + assert "Add more" == driver.find_element_by_link_text("Add more").text + + #ToDo Check that the number of private projects available is updated each time that you make a change + #(e.g from private to public and vice versa). + driver.find_element_by_xpath("//li/div/div/div[2]/a").click() + changeButton = self.get_element(By.XPATH, "//span[@id='editor_heading_privacy_icon']/i") + actions = ActionChains(driver) + actions.move_to_element(changeButton) + actions.double_click(changeButton) + actions.perform() + self.get_element(By.ID, "logo_small").click() + assert self.get_element(By.ID, "public-sketches-counter").text=="3" + assert self.get_element(By.ID, "private-sketches-counter").text=="1" + + driver.find_element_by_xpath("//li/div/div/div[2]/a").click() + changeButton = self.get_element(By.XPATH, "//span[@id='editor_heading_privacy_icon']/i") + actions = ActionChains(driver) + actions.move_to_element(changeButton) + actions.double_click(changeButton) + actions.perform() + self.get_element(By.ID, "logo_small").click() + assert driver.find_element_by_id("public-sketches-counter").text=="2" + assert driver.find_element_by_id("private-sketches-counter").text=="2" + + + #Check that All, Public and Private buttons work, clicking on each of them and verifying + #that the correct number of sketches is viewed each time + + #Check "All button" + self.get_element(By.XPATH, "//div[@id='filter-options']/label[2]").click() + sketches = self.find_all('#project_list >li') + assert len(sketches) == 4 + #Check "Public button" + self.get_element(By.XPATH, "//div[@id='filter-options']/label[2]").click() + sketches = self.find_all('#project_list >li .cb-icon-globe-inv') + assert len(sketches) == 2 + #Check "Private button" + self.get_element(By.XPATH, "//div[@id='filter-options']/label[3]").click() + sketches = self.find_all('#project_list >li .fa-lock') + assert len(sketches) == 2 + + #Check that the counter for available private sketches also appears at the upload sketch modal (ino, zip, multiple zip) and at the create and edit sketch modal. + self.get_element(By.ID, "sketch-upload-button").click() + self.get_element(By.ID, "upload-sketch-ino").click() + assert self.get_element(By.ID, "upload-sketch-modal-available-private-projects").text == "0/2" + driver.find_element_by_xpath("//div[4]/div[3]/button").click() + + self.get_element(By.ID, "sketch-upload-button").click() + self.get_element(By.ID, "upload-sketch-zip").click() + assert self.get_element(By.ID, "upload-sketch-modal-available-private-projects").text == "0/2" + driver.find_element_by_xpath("//div[4]/div[3]/button").click() + + self.get_element(By.ID, "sketch-upload-button").click() + self.get_element(By.ID, "upload-sketch-folder-zip").click() + assert self.get_element(By.ID, "upload-sketch-modal-available-private-projects").text == "0/2" + driver.find_element_by_xpath("//div[4]/div[3]/button").click() + + self.get_element(By.ID, "create_sketch_btn").click() + assert self.get_element(By.ID, "create-sketch-modal-available-private-projects").text == "0/2" + driver.find_element_by_xpath("//button[2]").click() + + #Open the create sketch modal and try to create a new project without providing a name. + #The Create button should be disabled. + self.get_element(By.ID, "create_sketch_btn").click() + self.get_element(By.ID, "create-sketch-name").clear() + self.get_element(By.ID, "create-sketch-name").send_keys(Keys.CONTROL + "a") + self.get_element(By.ID, "create-sketch-name").send_keys(Keys.DELETE) + assert not self.get_element(By.ID, "create-sketch-modal-action-button").is_enabled() + driver.find_element_by_xpath("//button[2]").click() + + + #Check that sketch name is auto-generated as: Untitled Sketch CURRENT_DATE. + self.get_element(By.ID, "create_sketch_btn").click() + current_date_text= "Untitled Sketch " + time.strftime("%Y-%m-%d") + assert self.get_element(By.ID, "create-sketch-name").get_attribute("value") == current_date_text + driver.find_element_by_xpath("//button[2]").click() + + #Check that when you create the sketch you are redirected into the editor. + self.get_element(By.ID, "create_sketch_btn").click() + self.get_element(By.ID, "create-sketch-modal-action-button").click() + self.get_element(By.ID, "cb_cf_flash_btn") + self.get_element(By.ID, "logo_small").click() + + #Check that short description + #Write short description with 17 characters + self.get_element(By.ID, "create_sketch_btn").click() + self.get_element(By.ID, "create-sketch-modal-sort-description").click() + self.get_element(By.ID, "create-sketch-modal-sort-description").send_keys("short description") + assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").text == "123" + driver.find_element_by_xpath("//button[2]").click() + + #Write short description with 140 characters + self.get_element(By.ID, "create_sketch_btn").click() + self.get_element(By.ID, "create-sketch-modal-sort-description").click() + self.get_element(By.ID, "create-sketch-modal-sort-description").send_keys("shortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescrip") + assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").text == "0" + driver.find_element_by_xpath("//button[2]").click() + + #Write short description with 153 characters + self.get_element(By.ID, "create_sketch_btn").click() + self.get_element(By.ID, "create-sketch-modal-sort-description").click() + self.get_element(By.ID, "create-sketch-modal-sort-description").send_keys("short descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort description") + assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").text == "-13" + assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").value_of_css_property('color') == "rgba(255, 0, 0, 1)" + driver.find_element_by_xpath("//button[2]").click() + +class TestCloneSketch(SeleniumTestCase): + + @pytest.mark.requires_url(STAGING_SITE_URL) + def test_delete(self, tester_login): + try: + sketches = self.find_all('#project_list > li .sketch-block-title > a') + projects = [] + for sketch in sketches: + projects.append(sketch.text) + for project in projects: + self.delete_project(project) + except: + print 'No sketches found' + + def test_clone(self): + #Create Clone + self.get_element(By.ID,"create_sketch_btn").click() + self.get_element(By.ID,"create-sketch-modal-action-button").click() + self.get_element(By.ID, "save") + self.get_element(By.ID,"logo_small").click() + self.get_element(By.XPATH, "//div[4]/a[2]/i").click() + self.get_element(By.ID, "save") + self.get_element(By.ID,"logo_small").click() + current_date_text= "Untitled Sketch " + time.strftime("%Y-%m-%d") + assert self.get_element(By.XPATH, "//div[4]/div/span").text == "Cloned from Sketch" + assert self.get_element(By.XPATH, "//div[4]/div/a").text == current_date_text + assert self.get_element(By.XPATH, "//div[4]/div/a[2]").text == "demo_user" + +class TestDeleteAllSketches(SeleniumTestCase): + + @pytest.mark.requires_url(STAGING_SITE_URL) + def test_delete(self, tester_login): + try: + sketches = self.find_all('#project_list > li .sketch-block-title > a') + projects = [] + for sketch in sketches: + projects.append(sketch.text) + for project in projects: + self.delete_project(project) + except: + print 'No sketches found' + + self.logout() From b04cdd29bd8bcc86f0fa8b00536f007900f06e1e Mon Sep 17 00:00:00 2001 From: konstantina Date: Fri, 29 Jul 2016 16:03:36 +0300 Subject: [PATCH 08/29] Removed folder sketches_counters which contained tests that didn't work. --- tests/common/sketches_counters/__init__.py | 0 tests/common/sketches_counters/test_editor.py | 110 --------- .../test_inside_sketch_block.py | 115 ---------- .../test_sketches_counters.py | 211 ------------------ 4 files changed, 436 deletions(-) delete mode 100644 tests/common/sketches_counters/__init__.py delete mode 100644 tests/common/sketches_counters/test_editor.py delete mode 100644 tests/common/sketches_counters/test_inside_sketch_block.py delete mode 100644 tests/common/sketches_counters/test_sketches_counters.py diff --git a/tests/common/sketches_counters/__init__.py b/tests/common/sketches_counters/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/common/sketches_counters/test_editor.py b/tests/common/sketches_counters/test_editor.py deleted file mode 100644 index 70bf063..0000000 --- a/tests/common/sketches_counters/test_editor.py +++ /dev/null @@ -1,110 +0,0 @@ -from codebender_testing.utils import SeleniumTestCase -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import Select -from codebender_testing import config -from codebender_testing.config import STAGING_SITE_URL -from selenium.webdriver.common.action_chains import ActionChains -import os -import time -import pytest - -class TestEditor(SeleniumTestCase): - - def test_editor(self): - self.driver.implicitly_wait(30) - driver = self.driver - self.open("/") - #Login and visit the new home page. - credentials = { - 'username': os.environ.get('CODEBENDER_TEST_USER'), - 'password': os.environ.get('CODEBENDER_TEST_PASS'), - } - driver.find_element_by_id("login_btn").click() - driver.find_element_by_id("username").clear() - driver.find_element_by_id("username").send_keys(credentials['username']) - driver.find_element_by_id("password").clear() - driver.find_element_by_id("password").send_keys(credentials['password']) - driver.find_element_by_id("_submit").click() - - assert driver.find_element_by_id("private-sketches-counter").text=="0" - assert driver.find_element_by_id("public-sketches-counter").text=="0" - - #Create 1 public sketches - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_id("create-sketch-modal-action-button").click() - self.get_element(By.ID, "save") - driver.find_element_by_id("logo_small").click() - - #Check that the sketch was created - assert driver.find_element_by_id("public-sketches-counter").text=="1" - - #Check that when you click on the sketch, sketch opens in editor. - driver.find_element_by_xpath("//li/div/div/div[2]/a").click() - assert self.get_element(By.ID, "cb_cf_flash_btn").text == "Run on Arduino" - - #double click the earth icon on the left of its title to make it private . - #Project privacy settings successfully changed! - changeButton = self.get_element(By.XPATH, "//span[@id='editor_heading_privacy_icon']/i") - actions = ActionChains(driver) - actions.move_to_element(changeButton) - actions.double_click(changeButton) - actions.perform() - self.get_element(By.ID, "logo_small").click() - assert self.get_element(By.ID, "public-sketches-counter").text=="0" - assert self.get_element(By.ID, "private-sketches-counter").text=="1" - - driver.find_element_by_xpath("//li/div/div/div[2]/a").click() - changeButton = self.get_element(By.XPATH, "//span[@id='editor_heading_privacy_icon']/i") - actions = ActionChains(driver) - actions.move_to_element(changeButton) - actions.double_click(changeButton) - actions.perform() - - #Go to a sketch in editor and change the short description - #Rename the sketch from the editor - driver.find_element_by_xpath("//div[2]/a/span").click() - driver.find_element_by_xpath("//div[6]/div[2]/div/div/input").clear() - driver.find_element_by_xpath("//div[6]/div[2]/div/div/input").send_keys("test") - driver.find_element_by_xpath("//div[3]/button[2]").click() - #assert self.get_element(By.XPATH, "//div/pre").text == "Name successfully changed!" - driver.find_element_by_xpath("//div[6]/div/button").click() - - #Go to a sketch in editor and click the Clone button - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_id("create-sketch-modal-action-button").click() - driver.find_element_by_id("logo_small").click() - driver.find_element_by_xpath("//li/div/div/div[2]/a").click() - driver.find_element_by_id("clone_btn").click() - driver.find_element_by_id("logo_small").click() - - #Go to a sketch in editor and add a file/Rename file/delete a file/ - driver.find_element_by_id("newfile").click() - driver.find_element_by_id("createfield").clear() - driver.find_element_by_id("createfield").send_keys("test") - driver.find_element_by_id("createbutton").click() - self.get_element(By.XPATH, "//ul[@id='files_list']/li[2]/a[3]/i").click() - driver.find_element_by_id("newFilename").clear() - driver.find_element_by_id("newFilename").send_keys("testA") - driver.find_element_by_id("renamebutton").click() - self.get_element(By.XPATH, "//ul[@id='files_list']/li[2]/a[2]/i").click() - self.get_element(By.XPATH, "//div[5]/div[3]/a[2]").click() - driver.find_element_by_id("logo_small").click() - -class TestDeleteAllSketches(SeleniumTestCase): - - @pytest.mark.requires_url(STAGING_SITE_URL) - def test_delete(self, tester_login): - try: - sketches = self.find_all('#project_list > li .sketch-block-title > a') - projects = [] - for sketch in sketches: - projects.append(sketch.text) - for project in projects: - self.delete_project(project) - except: - print 'No sketches found' - - - self.logout() diff --git a/tests/common/sketches_counters/test_inside_sketch_block.py b/tests/common/sketches_counters/test_inside_sketch_block.py deleted file mode 100644 index e3a79b8..0000000 --- a/tests/common/sketches_counters/test_inside_sketch_block.py +++ /dev/null @@ -1,115 +0,0 @@ -from codebender_testing.utils import SeleniumTestCase -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import Select -from codebender_testing import config -from codebender_testing.config import STAGING_SITE_URL -import os -import time -import pytest - -class TestInsideSketchBlock(SeleniumTestCase): - - def test_inside_sketch_block(self): - self.driver.implicitly_wait(30) - driver = self.driver - self.open("/") - #Login and visit the new home page. - credentials = { - 'username': os.environ.get('CODEBENDER_TEST_USER'), - 'password': os.environ.get('CODEBENDER_TEST_PASS'), - } - driver.find_element_by_id("login_btn").click() - driver.find_element_by_id("username").clear() - driver.find_element_by_id("username").send_keys(credentials['username']) - driver.find_element_by_id("password").clear() - driver.find_element_by_id("password").send_keys(credentials['password']) - driver.find_element_by_id("_submit").click() - - assert driver.find_element_by_id("public-sketches-counter").text=="0" - - #Create 1 public sketches - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_id("create-sketch-modal-action-button").click() - self.get_element(By.ID, "save") - driver.find_element_by_id("logo_small").click() - #Check that the sketch was created - assert driver.find_element_by_id("public-sketches-counter").text=="1" - - #Check that when you click on the sketch, sketch opens in editor. - #Create a sketch using the Create button and go back to homepage. - #Sketch should say Created instead of Modified. - #Go back to the sketch previously created and do some changes. - #Save it and go back to homepage. Sketch should say Modified instead of Created. - driver.find_element_by_xpath("//li/div/div/div[2]/a").click() - assert self.get_element(By.ID, "cb_cf_flash_btn").text == "Run on Arduino" - self.get_element(By.ID, "logo_small").click() - assert self.get_element(By.XPATH , "//div/a/span").text == "created a few seconds ago" - - driver.find_element_by_xpath("//li/div/div/div[2]/a").click() - self.get_element(By.ID, "save").click() - self.get_element(By.ID, "logo_small").click() - assert self.get_element(By.XPATH , "//div/a/span").text == "modified a few seconds ago" - - #Check the Share button. - driver.find_element_by_xpath("//div[4]/a/i").click() - driver.find_element_by_link_text("Share").click() - driver.find_element_by_link_text("Embed").click() - driver.find_element_by_link_text("Share").click() - assert self.get_element(By.XPATH , "//div[7]/div/h3").text == "Share your Sketch" - self.get_element(By.XPATH, "//div[@id='share-modal']/div/button").click() - - #Check the clone sketch function. - #Click on Clone button and check that the sketch is cloned and opens in editor. - self.get_element(By.XPATH, "//div[4]/a[2]/i").click() - self.get_element(By.ID, "save").click() - self.get_element(By.ID, "logo_small").click() - self.get_element(By.XPATH, "//li/div/div/div[2]/a").click() - self.get_element(By.ID, "logo_small").click() - - #Check that the file list of the sketch is at the bottom of the sketch block. - driver.find_element_by_id("newfile").click() - driver.find_element_by_id("createfield").clear() - driver.find_element_by_id("createfield").send_keys("test.h") - self.get_element(By.ID, "createbutton").click() - assert self.get_element(By.ID, "operation_output").text == "File successfully created." - driver.find_element_by_id("logo_small").click() - - #Check that when a sketch has a short description, it appears at the section below the name, - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_id("create-sketch-modal-short-description").clear() - driver.find_element_by_id("create-sketch-modal-short-description").send_keys("Test") - driver.find_element_by_id("create-sketch-modal-action-button").click() - assert self.get_element(By.ID, "short-description").text == "Test" - - #Ckeck that when a sketch has a short description does not appear at all. - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_id("create-sketch-modal-short-description").clear() - driver.find_element_by_id("create-sketch-modal-short-description").send_keys("TestTestTestTestTestTestTestTestTestTest") - driver.find_element_by_id("create-sketch-modal-action-button").click() - assert self.get_element(By.ID, "short-description").text == "TestTestTestTestTestTestTestTestTestTest" - driver.find_element_by_id("logo_small").click() - - #Check the delete sketch fuction. - driver.find_element_by_xpath("//a[3]/i").click() - #Check that when the sketch is deleted the modal stays open showing the result of the deletion. - assert self.get_element(By.XPATH, "//div[5]/div/h3").text == "Are you sure you want to delete your sketch?" - driver.find_element_by_xpath("//div[4]/button").click() - driver.find_element_by_xpath("//div[4]/button[2]").click() - -class TestDeleteAllSketches(SeleniumTestCase): - - @pytest.mark.requires_url(STAGING_SITE_URL) - def test_delete(self, tester_login): - try: - sketches = self.find_all('#project_list > li .sketch-block-title > a') - projects = [] - for sketch in sketches: - projects.append(sketch.text) - for project in projects: - self.delete_project(project) - except: - print 'No sketches found' - - self.logout() diff --git a/tests/common/sketches_counters/test_sketches_counters.py b/tests/common/sketches_counters/test_sketches_counters.py deleted file mode 100644 index d1fa826..0000000 --- a/tests/common/sketches_counters/test_sketches_counters.py +++ /dev/null @@ -1,211 +0,0 @@ -from codebender_testing.utils import SeleniumTestCase -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.support.ui import Select -from codebender_testing import config -from codebender_testing.config import STAGING_SITE_URL -from selenium.webdriver.common.action_chains import ActionChains -import os -import time -import pytest - -class TestSketchesCounters(SeleniumTestCase): - - def test_sketches_counters(self): - self.driver.implicitly_wait(30) - driver = self.driver - self.open("/") - #Login and visit the new home page. - credentials = { - 'username': os.environ.get('CODEBENDER_TEST_USER'), - 'password': os.environ.get('CODEBENDER_TEST_PASS'), - } - driver.find_element_by_id("login_btn").click() - driver.find_element_by_id("username").clear() - driver.find_element_by_id("username").send_keys(credentials['username']) - driver.find_element_by_id("password").clear() - driver.find_element_by_id("password").send_keys(credentials['password']) - driver.find_element_by_id("_submit").click() - - assert driver.find_element_by_id("private-sketches-counter").text=="0" - assert driver.find_element_by_id("public-sketches-counter").text=="0" - - #Create 2 public sketches and Create 2 private sketches - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_id("create-sketch-modal-action-button").click() - self.get_element(By.ID, "save") - driver.find_element_by_id("logo_small").click() - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_id("create-sketch-modal-action-button").click() - self.get_element(By.ID, "save") - driver.find_element_by_id("logo_small").click() - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_xpath("(//input[@name='create-sketch-modal-title'])[2]").click() - driver.find_element_by_id("create-sketch-modal-action-button").click() - self.get_element(By.ID, "save") - driver.find_element_by_id("logo_small").click() - driver.find_element_by_id("create_sketch_btn").click() - driver.find_element_by_xpath("(//input[@name='create-sketch-modal-title'])[2]").click() - driver.find_element_by_id("create-sketch-modal-action-button").click() - self.get_element(By.ID, "save") - driver.find_element_by_id("logo_small").click() - - #Check that the counters have the correct value. - assert driver.find_element_by_id("private-sketches-counter").text=="2" - assert driver.find_element_by_id("public-sketches-counter").text=="2" - - #Check that the counter for private projects also appears at the Badges section and has the correct value. - assert driver.find_element_by_id("privateProjectAvailableNumber").text=="0" - assert driver.find_element_by_id("available-private-projects-counter").text=="0/2" - - #Check that if your account has private projects (e.g. 2) and all yor projects are public, counter for available private sketches should be 0/number of total private sketches(e.g. 0/2) and the link to the private sketches should be Add more. - assert "Add more" == driver.find_element_by_link_text("Add more").text - - #ToDo Check that the number of private projects available is updated each time that you make a change - #(e.g from private to public and vice versa). - driver.find_element_by_xpath("//li/div/div/div[2]/a").click() - changeButton = self.get_element(By.XPATH, "//span[@id='editor_heading_privacy_icon']/i") - actions = ActionChains(driver) - actions.move_to_element(changeButton) - actions.double_click(changeButton) - actions.perform() - self.get_element(By.ID, "logo_small").click() - assert self.get_element(By.ID, "public-sketches-counter").text=="3" - assert self.get_element(By.ID, "private-sketches-counter").text=="1" - - driver.find_element_by_xpath("//li/div/div/div[2]/a").click() - changeButton = self.get_element(By.XPATH, "//span[@id='editor_heading_privacy_icon']/i") - actions = ActionChains(driver) - actions.move_to_element(changeButton) - actions.double_click(changeButton) - actions.perform() - self.get_element(By.ID, "logo_small").click() - assert driver.find_element_by_id("public-sketches-counter").text=="2" - assert driver.find_element_by_id("private-sketches-counter").text=="2" - - - #Check that All, Public and Private buttons work, clicking on each of them and verifying - #that the correct number of sketches is viewed each time - - #Check "All button" - self.get_element(By.XPATH, "//div[@id='filter-options']/label[2]").click() - sketches = self.find_all('#project_list >li') - assert len(sketches) == 4 - #Check "Public button" - self.get_element(By.XPATH, "//div[@id='filter-options']/label[2]").click() - sketches = self.find_all('#project_list >li .cb-icon-globe-inv') - assert len(sketches) == 2 - #Check "Private button" - self.get_element(By.XPATH, "//div[@id='filter-options']/label[3]").click() - sketches = self.find_all('#project_list >li .fa-lock') - assert len(sketches) == 2 - - #Check that the counter for available private sketches also appears at the upload sketch modal (ino, zip, multiple zip) and at the create and edit sketch modal. - self.get_element(By.ID, "sketch-upload-button").click() - self.get_element(By.ID, "upload-sketch-ino").click() - assert self.get_element(By.ID, "upload-sketch-modal-available-private-projects").text == "0/2" - driver.find_element_by_xpath("//div[4]/div[3]/button").click() - - self.get_element(By.ID, "sketch-upload-button").click() - self.get_element(By.ID, "upload-sketch-zip").click() - assert self.get_element(By.ID, "upload-sketch-modal-available-private-projects").text == "0/2" - driver.find_element_by_xpath("//div[4]/div[3]/button").click() - - self.get_element(By.ID, "sketch-upload-button").click() - self.get_element(By.ID, "upload-sketch-folder-zip").click() - assert self.get_element(By.ID, "upload-sketch-modal-available-private-projects").text == "0/2" - driver.find_element_by_xpath("//div[4]/div[3]/button").click() - - self.get_element(By.ID, "create_sketch_btn").click() - assert self.get_element(By.ID, "create-sketch-modal-available-private-projects").text == "0/2" - driver.find_element_by_xpath("//button[2]").click() - - #Open the create sketch modal and try to create a new project without providing a name. - #The Create button should be disabled. - self.get_element(By.ID, "create_sketch_btn").click() - self.get_element(By.ID, "create-sketch-name").clear() - self.get_element(By.ID, "create-sketch-name").send_keys(Keys.CONTROL + "a") - self.get_element(By.ID, "create-sketch-name").send_keys(Keys.DELETE) - assert not self.get_element(By.ID, "create-sketch-modal-action-button").is_enabled() - driver.find_element_by_xpath("//button[2]").click() - - - #Check that sketch name is auto-generated as: Untitled Sketch CURRENT_DATE. - self.get_element(By.ID, "create_sketch_btn").click() - current_date_text= "Untitled Sketch " + time.strftime("%Y-%m-%d") - assert self.get_element(By.ID, "create-sketch-name").get_attribute("value") == current_date_text - driver.find_element_by_xpath("//button[2]").click() - - #Check that when you create the sketch you are redirected into the editor. - self.get_element(By.ID, "create_sketch_btn").click() - self.get_element(By.ID, "create-sketch-modal-action-button").click() - self.get_element(By.ID, "cb_cf_flash_btn") - self.get_element(By.ID, "logo_small").click() - - #Check that short description - #Write short description with 17 characters - self.get_element(By.ID, "create_sketch_btn").click() - self.get_element(By.ID, "create-sketch-modal-sort-description").click() - self.get_element(By.ID, "create-sketch-modal-sort-description").send_keys("short description") - assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").text == "123" - driver.find_element_by_xpath("//button[2]").click() - - #Write short description with 140 characters - self.get_element(By.ID, "create_sketch_btn").click() - self.get_element(By.ID, "create-sketch-modal-sort-description").click() - self.get_element(By.ID, "create-sketch-modal-sort-description").send_keys("shortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescriptionshortdescrip") - assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").text == "0" - driver.find_element_by_xpath("//button[2]").click() - - #Write short description with 153 characters - self.get_element(By.ID, "create_sketch_btn").click() - self.get_element(By.ID, "create-sketch-modal-sort-description").click() - self.get_element(By.ID, "create-sketch-modal-sort-description").send_keys("short descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort descriptionshort description") - assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").text == "-13" - assert self.get_element(By.ID, "create-sketch-modal-sort-description-count").value_of_css_property('color') == "rgba(255, 0, 0, 1)" - driver.find_element_by_xpath("//button[2]").click() - -class TestCloneSketch(SeleniumTestCase): - - @pytest.mark.requires_url(STAGING_SITE_URL) - def test_delete(self, tester_login): - try: - sketches = self.find_all('#project_list > li .sketch-block-title > a') - projects = [] - for sketch in sketches: - projects.append(sketch.text) - for project in projects: - self.delete_project(project) - except: - print 'No sketches found' - - def test_clone(self): - #Create Clone - self.get_element(By.ID,"create_sketch_btn").click() - self.get_element(By.ID,"create-sketch-modal-action-button").click() - self.get_element(By.ID, "save") - self.get_element(By.ID,"logo_small").click() - self.get_element(By.XPATH, "//div[4]/a[2]/i").click() - self.get_element(By.ID, "save") - self.get_element(By.ID,"logo_small").click() - current_date_text= "Untitled Sketch " + time.strftime("%Y-%m-%d") - assert self.get_element(By.XPATH, "//div[4]/div/span").text == "Cloned from Sketch" - assert self.get_element(By.XPATH, "//div[4]/div/a").text == current_date_text - assert self.get_element(By.XPATH, "//div[4]/div/a[2]").text == "demo_user" - -class TestDeleteAllSketches(SeleniumTestCase): - - @pytest.mark.requires_url(STAGING_SITE_URL) - def test_delete(self, tester_login): - try: - sketches = self.find_all('#project_list > li .sketch-block-title > a') - projects = [] - for sketch in sketches: - projects.append(sketch.text) - for project in projects: - self.delete_project(project) - except: - print 'No sketches found' - - self.logout() From ca761f927c61bcd93be06b28f665b8fc6d6f3e2f Mon Sep 17 00:00:00 2001 From: konstantina Date: Fri, 29 Jul 2016 16:05:07 +0300 Subject: [PATCH 09/29] Corrected typo in utils.py file. --- codebender_testing/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codebender_testing/utils.py b/codebender_testing/utils.py index 90c9dd3..91f18ae 100644 --- a/codebender_testing/utils.py +++ b/codebender_testing/utils.py @@ -942,7 +942,7 @@ def change_name_editor(self, name): ) def change_short_description(self, description): - nameField = self.get_element(By.CSS_SELECTOR,'#create-sketch-modal-sort-description') + nameField = self.get_element(By.CSS_SELECTOR,'#create-sketch-modal-short-description') nameField.clear() nameField.send_keys(description) nameField.send_keys(Keys.ENTER) From 5d85a8729f25ae74c166e3f5a8e8205e683f5822 Mon Sep 17 00:00:00 2001 From: konstantina Date: Fri, 29 Jul 2016 16:05:49 +0300 Subject: [PATCH 10/29] Added test for filters and counters in user's homepage. Checks that counters: Public sketches (blue) and Private sketches (purple) have the correct value (number of sketches of each category). Checks that the counter for private projects also appears at the Badges section and has the correct value. Checks that the number of private projects available is updated each time that you make a change (e.g from private to public and vice versa). Checks that the counter for available private sketches also appears at the upload sketch modal (ino, zip, multiple zip) and at the create sketch modal. Checks that All, Public and Private filters work. --- .../test_homepage_filters_counters.py | 220 ++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 tests/common/homepage_filters_counters/test_homepage_filters_counters.py diff --git a/tests/common/homepage_filters_counters/test_homepage_filters_counters.py b/tests/common/homepage_filters_counters/test_homepage_filters_counters.py new file mode 100644 index 0000000..578f12c --- /dev/null +++ b/tests/common/homepage_filters_counters/test_homepage_filters_counters.py @@ -0,0 +1,220 @@ +from codebender_testing.utils import SeleniumTestCase +from selenium import webdriver +from selenium.webdriver.common.by import By +from codebender_testing import config +from selenium.webdriver.common.action_chains import ActionChains +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions +import pytest + + +class TestSketchesCounters(SeleniumTestCase): + + @pytest.fixture(scope="class", autouse=True) + def open_user_home(self, tester_login): + """Makes sure we are logged in and are at the user home page + performing any of these tests.""" + pass + + def test_sketches_counters(self): + driver = self.driver + # Check that the counters: Public sketches (blue) and Private sketches + # (purple) have the correct value (number of sketches of each category). + + assert self.get_element(By.ID, "private-sketches-counter").text=="0" + assert self.get_element(By.ID,"public-sketches-counter").text=="0" + + # Check that the counter for private projects also appears at the Badges + # section and has the correct value. + privateProjects = self.get_element(By.ID, + "available-private-sketches-counter").text + assert self.get_element(By.ID, + "privateProjectAvailableNumber").text == \ + privateProjects.split('/')[0] + + # Check that the counter for available private sketches also appears at + # the upload sketch modal (ino, zip, multiple zip) and at the create and + # edit sketch modal. + + # Upload .ino. + self.get_element(By.ID, "sketch-upload-button").click() + self.get_element(By.ID, "upload-sketch-ino").click() + assert self.get_element(By.ID, + "upload-sketch-modal-available-private-sketches").text == \ + privateProjects + close_btn = self.get_element(By.CSS_SELECTOR, + "#home-upload-sketch-modal .btn-danger") + close_btn.click() + # Wait for the modal to close. + WebDriverWait(self.driver, 30).until( + expected_conditions.invisibility_of_element_located( + (By.CSS_SELECTOR, ".modal-backdrop fade") + ) + ) + + # Upload .zip. + self.get_element(By.ID, "sketch-upload-button").click() + self.get_element(By.ID, "upload-sketch-zip").click() + assert self.get_element(By.ID, + "upload-sketch-modal-available-private-sketches").text == \ + privateProjects + close_btn = self.get_element(By.CSS_SELECTOR, + "#home-upload-sketch-modal .btn-danger") + close_btn.click() + # Wait for the modal to close. + WebDriverWait(self.driver, 30).until( + expected_conditions.invisibility_of_element_located( + (By.CSS_SELECTOR, ".modal-backdrop fade") + ) + ) + + # Upload your sketch folder [.zip]. + self.get_element(By.ID, "sketch-upload-button").click() + self.get_element(By.ID, "upload-sketch-folder-zip").click() + assert self.get_element(By.ID, + "upload-sketch-modal-available-private-sketches").text == \ + privateProjects + close_btn = self.get_element(By.CSS_SELECTOR, + "#home-upload-sketch-modal .btn-danger") + close_btn.click() + # Wait for the modal to close. + WebDriverWait(self.driver, 30).until( + expected_conditions.invisibility_of_element_located( + (By.CSS_SELECTOR, ".modal-backdrop fade") + ) + ) + + # Create sketch modal. + self.get_element(By.ID, "create_sketch_btn").click() + assert self.get_element(By.ID, + "create-sketch-modal-available-private-sketches").text == \ + privateProjects + close_btn = self.get_element(By.CSS_SELECTOR, + "#create-sketch-modal .btn-danger") + close_btn.click() + WebDriverWait(self.driver, 30).until( + expected_conditions.invisibility_of_element_located( + (By.CSS_SELECTOR, ".modal-backdrop fade") + ) + ) + + # Create one public project. + self.create_sketch('public' , 'publicSketch1', 'short description') + self.open("/") + + # Check that public sketch number was increased from 0 to 1. + assert self.get_element(By.ID, "public-sketches-counter").text=="1" + + # Create one private project. + self.create_sketch('private' , 'privateSketch1', 'short description') + self.open("/") + + # Check that private sketch number was increased from 0 to 1. + assert self.get_element(By.ID, "private-sketches-counter").text=="1" + + # Check that the counter for available private projects that appears at + # the Badges section has the correct value. + + private_sketches = self.get_element(By.ID, + "available-private-sketches-counter").text + assert self.get_element(By.ID, + "privateProjectAvailableNumber").text == \ + private_sketches.split('/')[0] + + # Check that the number of private and public projects is updated + # each time that you make a change (change a sketch from public + # to private and vice versa). + editInfo = driver.find_element_by_css_selector( + '#project_list li[data-name="publicSketch1"] \ + .sketch-block-container .sketch-block-header \ + .sketch-block-edit-info') + hoverEditInfo = ActionChains(driver).move_to_element(editInfo).perform() + editInfoClick = driver.find_element_by_css_selector( + '#project_list li[data-name="publicSketch1"] \ + .sketch-block-container .sketch-block-header \ + .sketch-block-edit-info a') + editInfoClick.click() + # Change project from public to private. + privateRadioButton = self.get_element(By.CSS_SELECTOR, + '#edit-sketch-modal-type-controls [value="private"]') + privateRadioButton.click() + # Click the Save button. + save_btn = self.get_element(By.CSS_SELECTOR, + "#edit-sketch-modal .btn-success") + save_btn.click() + # Wait for the modal to close. + WebDriverWait(self.driver, 30).until( + expected_conditions.invisibility_of_element_located( + (By.CSS_SELECTOR, "#edit-sketch-modal") + ) + ) + # Check public and private projects counters. + assert self.get_element(By.ID, "private-sketches-counter").text=="2" + assert self.get_element(By.ID, "public-sketches-counter").text=="0" + + editInfo = driver.find_element_by_css_selector( + '#project_list li[data-name="publicSketch1"] \ + .sketch-block-container .sketch-block-header \ + .sketch-block-edit-info') + hoverEditInfo = ActionChains(driver).move_to_element(editInfo).perform() + editInfoClick = driver.find_element_by_css_selector( + '#project_list li[data-name="publicSketch1"] \ + .sketch-block-container .sketch-block-header \ + .sketch-block-edit-info a') + editInfoClick.click() + # Change project from private to public. + publicRadioButton = self.get_element(By.CSS_SELECTOR, + '#edit-sketch-modal-type-controls [value="public"]') + publicRadioButton.click() + # Click the Save button. + save_btn = self.get_element(By.CSS_SELECTOR, + "#edit-sketch-modal .btn-success") + save_btn.click() + # Wait for the modal to close. + WebDriverWait(self.driver, 30).until( + expected_conditions.invisibility_of_element_located( + (By.CSS_SELECTOR, "#edit-sketch-modal") + ) + ) + # Check public and private projects counters. + assert self.get_element(By.ID, "private-sketches-counter").text=="1" + assert self.get_element(By.ID, "public-sketches-counter").text=="1" + + + def test_sketch_filters(self): + # Check that All, Public and Private buttons work, by clicking on each + # of them and verifying hat the correct number of sketches appears. + + # Check "All sketches button". + self.get_element(By.CSS_SELECTOR, + '#filter-options label[data-filter="all"]').click() + sketches = self.find_all('#project_list >li') + assert len(sketches) == 2 + + # Check "Public button". + self.get_element(By.CSS_SELECTOR, + '#filter-options label[data-filter="public"]').click() + sketches = self.find_all('#project_list >li .cb-icon-globe-inv') + assert len(sketches) == 1 + + # Check "Private button". + self.get_element(By.CSS_SELECTOR, + '#filter-options label[data-filter="private"]').click() + sketches = self.find_all('#project_list >li .fa-lock') + assert len(sketches) == 1 + +class TestDeleteAllSketches(SeleniumTestCase): + + def test_delete(self, tester_login): + try: + sketches = self.find_all('#project_list > li \ + .sketch-block-title > a') + projects = [] + for sketch in sketches: + projects.append(sketch.text) + for project in projects: + self.delete_project(project) + except: + print 'No sketches found' + + self.logout() From fdd54d9a55adf012f1e5a8b72d624fd795233de4 Mon Sep 17 00:00:00 2001 From: konstantina Date: Fri, 29 Jul 2016 16:29:43 +0300 Subject: [PATCH 11/29] Check that sketch name is auto-generated as: Untitled Sketch CURRENT_DATE. --- .../modal_improvement/test_sketch_modal_improvement.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/common/modal_improvement/test_sketch_modal_improvement.py b/tests/common/modal_improvement/test_sketch_modal_improvement.py index c16e9c9..92b11b7 100644 --- a/tests/common/modal_improvement/test_sketch_modal_improvement.py +++ b/tests/common/modal_improvement/test_sketch_modal_improvement.py @@ -37,6 +37,12 @@ def test_create_sketch_modal(self): assert self.get_element(By.ID, 'create-sketch-name') == \ self.driver.switch_to.active_element + # Check that sketch name is auto-generated as: + # Untitled Sketch CURRENT_DATE. + current_date_text= "Untitled Sketch " + time.strftime("%Y-%m-%d") + assert self.get_element(By.ID, + "create-sketch-name").get_attribute("value") == current_date_text + # Check that when the input has focus and you press Enter, # the create sketch action is executed. self.get_element(By.ID, 'create-sketch-name').send_keys(Keys.ENTER) From 04644d4c68f3d223fba3c1b0bd16ba6661068d0f Mon Sep 17 00:00:00 2001 From: konstantina Date: Fri, 29 Jul 2016 16:38:57 +0300 Subject: [PATCH 12/29] Check that when user creates a sketch he is redirected into the editor. --- .../common/modal_improvement/test_sketch_modal_improvement.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/common/modal_improvement/test_sketch_modal_improvement.py b/tests/common/modal_improvement/test_sketch_modal_improvement.py index 92b11b7..c88e6c8 100644 --- a/tests/common/modal_improvement/test_sketch_modal_improvement.py +++ b/tests/common/modal_improvement/test_sketch_modal_improvement.py @@ -64,6 +64,10 @@ def test_create_sketch_modal(self): ) ) + # Check that when you create the sketch you are redirected + # into the editor. + self.get_element(By.ID, "cb_cf_flash_btn") + # Delete the created project. self.open("/") self.delete_project(createdProject) From 458eb858c028bff4816adf51d91c991eff94137c Mon Sep 17 00:00:00 2001 From: konstantina Date: Fri, 29 Jul 2016 17:40:50 +0300 Subject: [PATCH 13/29] Added missing import. --- tests/common/modal_improvement/test_sketch_modal_improvement.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/common/modal_improvement/test_sketch_modal_improvement.py b/tests/common/modal_improvement/test_sketch_modal_improvement.py index c88e6c8..426cc6b 100644 --- a/tests/common/modal_improvement/test_sketch_modal_improvement.py +++ b/tests/common/modal_improvement/test_sketch_modal_improvement.py @@ -8,6 +8,7 @@ from codebender_testing.config import TIMEOUT from selenium.webdriver.support.ui import WebDriverWait import pytest +import time class TestSketchesCounters(SeleniumTestCase): From 1a058b5b6383dd5c739228fc4a2427e3e1a52231 Mon Sep 17 00:00:00 2001 From: konstantina Date: Fri, 29 Jul 2016 17:41:57 +0300 Subject: [PATCH 14/29] Check that Create btn is disabled when you create a sketch without a name. --- .../test_sketch_modal_improvement.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/common/modal_improvement/test_sketch_modal_improvement.py b/tests/common/modal_improvement/test_sketch_modal_improvement.py index 426cc6b..75158bb 100644 --- a/tests/common/modal_improvement/test_sketch_modal_improvement.py +++ b/tests/common/modal_improvement/test_sketch_modal_improvement.py @@ -48,7 +48,8 @@ def test_create_sketch_modal(self): # the create sketch action is executed. self.get_element(By.ID, 'create-sketch-name').send_keys(Keys.ENTER) - self.get_element(By.CSS_SELECTOR, '#create-sketch-modal-action-button .fa-spinner') + self.get_element(By.CSS_SELECTOR, + '#create-sketch-modal-action-button .fa-spinner') # Check that during the sketch creation, # the sketch privacy radio buttons are disabled. @@ -72,3 +73,19 @@ def test_create_sketch_modal(self): # Delete the created project. self.open("/") self.delete_project(createdProject) + + # Check that Create btn is disbaled when you try to create a sketch + # without a name. + createSketchBtn = self.get_element(By.ID, 'create_sketch_btn') + createSketchBtn.click() + WebDriverWait(self.driver, TIMEOUT['LOCATE_ELEMENT']).until( + expected_conditions.visibility_of_element_located( + (By.CSS_SELECTOR, "#create-sketch-modal") + ) + ) + self.get_element(By.ID, 'create-sketch-name').clear() + self.get_element(By.ID, "create-sketch-name").send_keys( + Keys.CONTROL + "a") + self.get_element(By.ID, "create-sketch-name").send_keys(Keys.DELETE) + assert self.get_element(By.ID, + 'create-sketch-modal-action-button').get_attribute('disabled') From 2cca710ff05fe14e7263e210475a4cc827131c67 Mon Sep 17 00:00:00 2001 From: konstantina Date: Tue, 2 Aug 2016 17:14:37 +0300 Subject: [PATCH 15/29] Check that when user creates sketch with invalid name, error message appears. --- .../test_sketch_modal_improvement.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/common/modal_improvement/test_sketch_modal_improvement.py b/tests/common/modal_improvement/test_sketch_modal_improvement.py index 75158bb..ea81883 100644 --- a/tests/common/modal_improvement/test_sketch_modal_improvement.py +++ b/tests/common/modal_improvement/test_sketch_modal_improvement.py @@ -89,3 +89,19 @@ def test_create_sketch_modal(self): self.get_element(By.ID, "create-sketch-name").send_keys(Keys.DELETE) assert self.get_element(By.ID, 'create-sketch-modal-action-button').get_attribute('disabled') + + # Check thatwhen you create a sketch with invalid name error message + # "Invalid Project Name. Please enter a new one." appears. + self.get_element(By.ID, "create-sketch-name").send_keys('.') + self.get_element(By.ID, 'create-sketch-name').send_keys(Keys.ENTER) + assert self.get_element(By.ID, + 'create-sketch-modal-action-button').get_attribute('disabled') + WebDriverWait(self.driver, TIMEOUT['LOCATE_ELEMENT']).until( + expected_conditions.element_to_be_clickable( + (By.ID, 'create-sketch-modal-action-button') + ) + ) + errorMessage = self.get_element(By.ID, + 'create-sketch-modal-error-message') + assert errorMessage.text == \ + "Invalid Project Name. Please enter a new one." From d84b4dae690dc945c9ebcedb3bcc9cb0ac345b93 Mon Sep 17 00:00:00 2001 From: konstantina Date: Tue, 9 Aug 2016 16:16:21 +0300 Subject: [PATCH 16/29] Added short description tests inside Create Sketch modal. Check the description character counter is always in sync with the length of the short description. Check that when you enter a short description longer than 140 chars the character counter becomes red. --- .../test_sketch_modal_improvement.py | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/tests/common/modal_improvement/test_sketch_modal_improvement.py b/tests/common/modal_improvement/test_sketch_modal_improvement.py index ea81883..a47cfae 100644 --- a/tests/common/modal_improvement/test_sketch_modal_improvement.py +++ b/tests/common/modal_improvement/test_sketch_modal_improvement.py @@ -105,3 +105,65 @@ def test_create_sketch_modal(self): 'create-sketch-modal-error-message') assert errorMessage.text == \ "Invalid Project Name. Please enter a new one." + + # Check the description character counter is always in sync with + # the length of the short description. + description = self.get_element(By.CSS_SELECTOR, + '#create-sketch-modal-short-description') + description.clear() + description.send_keys('short description') + print self.get_element(By.ID, + "create-sketch-modal-short-description-count").text + assert self.get_element(By.ID, + "create-sketch-modal-short-description-count").text == "123" + self.get_element(By.CSS_SELECTOR, + "#create-sketch-modal .btn-danger").click() + WebDriverWait(self.driver, TIMEOUT['LOCATE_ELEMENT']).until( + expected_conditions.invisibility_of_element_located( + (By.CSS_SELECTOR, "#create-sketch-modal") + ) + ) + createSketchBtn = self.get_element(By.ID, 'create_sketch_btn') + createSketchBtn.click() + WebDriverWait(self.driver, TIMEOUT['LOCATE_ELEMENT']).until( + expected_conditions.visibility_of_element_located( + (By.CSS_SELECTOR, "#create-sketch-modal") + ) + ) + + # Check that when you enter a short description longer than 140 chars + # the character counter becomes red. + description = self.get_element(By.CSS_SELECTOR, + '#create-sketch-modal-short-description') + description.clear() + description.send_keys( + "shortdescriptionshortdescriptionshortdescriptionshortdescription \ + shortdescriptionshortdescriptionshortdescriptionshortdescription") + assert self.get_element(By.ID, + "create-sketch-modal-short-description-count").text == "-1" + assert self.get_element(By.CSS_SELECTOR, + "#create-sketch-modal-short-description-count.overflow") + + # Check the description character counter is always in sync with + # the length of the short description. + description.clear() + description.send_keys( + "shortdescriptionshortdescriptionshortdescriptionshortdescription \ + shortdescriptionshortdescriptionshortdescriptionshortdescriptio") + assert self.get_element(By.ID, + "create-sketch-modal-short-description-count").text == "0" + self.get_element(By.CSS_SELECTOR, + "#create-sketch-modal-action-button").click() + self.get_element(By.ID, "cb_cf_flash_btn") + self.open("/") + + def test_delete(self, tester_login): + try: + sketches = self.find_all('#project_list > li .sketch-block-title > a') + projects = [] + for sketch in sketches: + projects.append(sketch.text) + for project in projects: + self.delete_project(project) + except: + print 'No sketches found' From b3d143c2c3c141cb5c688e0e181c631d57a55ecc Mon Sep 17 00:00:00 2001 From: konstantina Date: Tue, 9 Aug 2016 16:43:08 +0300 Subject: [PATCH 17/29] Added test for "Cloned from" info that appear in homepage. Tests that when a project is cloned in user's homepage message "Cloned from Sketch sketch_name by username" appears under the cloned project. --- tests/common/user_home/test_user_home.py | 33 +++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/tests/common/user_home/test_user_home.py b/tests/common/user_home/test_user_home.py index 1a19364..002bed3 100644 --- a/tests/common/user_home/test_user_home.py +++ b/tests/common/user_home/test_user_home.py @@ -1,6 +1,6 @@ from selenium.webdriver.common.by import By import pytest - +from codebender_testing import config from codebender_testing.config import TEST_DATA_INO from codebender_testing.config import TEST_DATA_ZIP from codebender_testing.utils import SeleniumTestCase @@ -57,3 +57,34 @@ def test_upload_project_zip(self): sketch_upload_zip = self.get_element(By.CSS_SELECTOR, '#upload-sketch-zip') sketch_upload_zip.click() self._upload_test('#dropzoneForm', TEST_DATA_ZIP, sketch_name='upload_zip') + + def test_clone(self): + self.create_sketch('public' , 'publicSketch1', 'short description') + self.open("/") + sketch = self.find('#project_list > li .sketch-block-title > a') + self.get_element(By.CSS_SELECTOR, + '#project_list > li .sketch-block-controls .fa-clone').click() + self.get_element(By.ID, "save") + self.get_element(By.ID,"logo_small").click() + sketches = self.find_all('#project_list > li .sketch-block-title > a') + projects = [] + for sketch in sketches: + projects.append(sketch.text) + for project in projects: + if 'copy' in project: + assert self.get_element(By.CSS_SELECTOR, + '.sketch-block-cloned-from').text == \ + "Cloned from Sketch publicSketch1 by demo_user" + + def test_delete(self, tester_login): + try: + sketches = self.find_all('#project_list > li \ + .sketch-block-title > a') + projects = [] + for sketch in sketches: + projects.append(sketch.text) + for project in projects: + self.delete_project(project) + print project + except: + print 'No sketches found' From 5f3db1d698191342104e90a30d306b6ea6d6a92d Mon Sep 17 00:00:00 2001 From: konstantina Date: Thu, 11 Aug 2016 12:27:59 +0300 Subject: [PATCH 18/29] Test that Create button works. Test that when you create a sketch with short description, short description appears under sketch's title. Test that when a sketch is created, created message appears next to its title. --- tests/common/user_home/test_user_home.py | 30 ++++++++++++------------ 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/tests/common/user_home/test_user_home.py b/tests/common/user_home/test_user_home.py index 002bed3..8b14508 100644 --- a/tests/common/user_home/test_user_home.py +++ b/tests/common/user_home/test_user_home.py @@ -58,23 +58,24 @@ def test_upload_project_zip(self): sketch_upload_zip.click() self._upload_test('#dropzoneForm', TEST_DATA_ZIP, sketch_name='upload_zip') - def test_clone(self): + def test_create(self): self.create_sketch('public' , 'publicSketch1', 'short description') self.open("/") + # Test that short description is present. sketch = self.find('#project_list > li .sketch-block-title > a') - self.get_element(By.CSS_SELECTOR, - '#project_list > li .sketch-block-controls .fa-clone').click() - self.get_element(By.ID, "save") - self.get_element(By.ID,"logo_small").click() - sketches = self.find_all('#project_list > li .sketch-block-title > a') - projects = [] - for sketch in sketches: - projects.append(sketch.text) - for project in projects: - if 'copy' in project: - assert self.get_element(By.CSS_SELECTOR, - '.sketch-block-cloned-from').text == \ - "Cloned from Sketch publicSketch1 by demo_user" + assert self.get_element(By.CSS_SELECTOR, + '#project_list > li .sketch-block-creation-container \ + .sketch-block-creation') + assert self.get_element(By.CSS_SELECTOR, + '#project_list > li .sketch-block-description \ + .sketch-block-short-description') + # Test that when a sketch is created, + # "created" appears next to its title. + sketch = self.find('#project_list > li .sketch-block-title > a') + assert self.get_element(By.CSS_SELECTOR, + '#project_list > li .sketch-block-creation-container \ + .sketch-block-creation').text == \ + "created a few seconds ago" def test_delete(self, tester_login): try: @@ -85,6 +86,5 @@ def test_delete(self, tester_login): projects.append(sketch.text) for project in projects: self.delete_project(project) - print project except: print 'No sketches found' From e2491ec20195dbaef27ef3d06a4bcad25fed13c0 Mon Sep 17 00:00:00 2001 From: konstantina Date: Thu, 11 Aug 2016 12:31:38 +0300 Subject: [PATCH 19/29] Test that when sketch short description is modified, modified msg appears. --- tests/common/user_home/test_user_home.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/common/user_home/test_user_home.py b/tests/common/user_home/test_user_home.py index 8b14508..de1dc8b 100644 --- a/tests/common/user_home/test_user_home.py +++ b/tests/common/user_home/test_user_home.py @@ -77,6 +77,20 @@ def test_create(self): .sketch-block-creation').text == \ "created a few seconds ago" + def test_modify(self): + driver = self.driver + sketch = self.find('#project_list > li .sketch-block-title > a').click() + self.change_short_description_editor('') + self.get_element(By.ID, "save").click() + self.open("/") + # Test that when a sketch is modified, + # "modified" appears next to its title. + sketch = self.find('#project_list > li .sketch-block-title > a') + assert self.get_element(By.CSS_SELECTOR, + '#project_list > li .sketch-block-creation-container \ + .sketch-block-creation').text == \ + "modified a few seconds ago" + def test_delete(self, tester_login): try: sketches = self.find_all('#project_list > li \ From 874078599539808aa6d8a9a714cf3052ee45abf3 Mon Sep 17 00:00:00 2001 From: konstantina Date: Thu, 11 Aug 2016 12:32:40 +0300 Subject: [PATCH 20/29] Test Share modal. Check that share modal opens and you can click Embed tab. Check that you can swith back to Share tab inside share modal. --- tests/common/user_home/test_user_home.py | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/common/user_home/test_user_home.py b/tests/common/user_home/test_user_home.py index de1dc8b..68be81f 100644 --- a/tests/common/user_home/test_user_home.py +++ b/tests/common/user_home/test_user_home.py @@ -91,6 +91,31 @@ def test_modify(self): .sketch-block-creation').text == \ "modified a few seconds ago" + def test_share(self): + # Test the Share button. + sketch = self.find('#project_list > li .sketch-block-title > a') + self.get_element(By.CSS_SELECTOR, + '#project_list > li .sketch-block-controls \ + .fa-share-square-o').click() + # Check that share modal opens and you can click Embed tab. + self.get_element(By.CSS_SELECTOR, + '#share-modal .fa-code ').click() + assert self.get_element(By.CSS_SELECTOR, + '#share-modal .active > a ').text == "Embed" + # Check that you can click Share tab inside share modal. + self.get_element(By.CSS_SELECTOR, + '#share-modal .fa-share-square-o ').click() + assert self.get_element(By.CSS_SELECTOR, + '#share-modal .active > a ').text == "Share" + # Close share modal. + self.get_element(By.CSS_SELECTOR, + '#share-modal .modal-close-button').click() + WebDriverWait(self.driver, 30).until( + expected_conditions.invisibility_of_element_located( + (By.ID, "#share-modal") + ) + ) + def test_delete(self, tester_login): try: sketches = self.find_all('#project_list > li \ From 0586f9d2a320ce1ab5e4797e8f7b70f2ce3bc1d6 Mon Sep 17 00:00:00 2001 From: konstantina Date: Thu, 11 Aug 2016 12:35:04 +0300 Subject: [PATCH 21/29] Tests clone button. Tests that when a sketch is cloned, sketch opens in editor. Tests that in user's home page message Cloned from Sketch sketch_name by username appears under the cloned project. --- tests/common/user_home/test_user_home.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/common/user_home/test_user_home.py b/tests/common/user_home/test_user_home.py index 68be81f..ad96f70 100644 --- a/tests/common/user_home/test_user_home.py +++ b/tests/common/user_home/test_user_home.py @@ -116,6 +116,23 @@ def test_share(self): ) ) + def test_clone(self): + # Test the Clone button. + sketch = self.find('#project_list > li .sketch-block-title > a') + self.get_element(By.CSS_SELECTOR, + '#project_list > li .sketch-block-controls .fa-clone').click() + self.get_element(By.ID, "save") + self.get_element(By.ID,"logo_small").click() + sketches = self.find_all('#project_list > li .sketch-block-title > a') + projects = [] + for sketch in sketches: + projects.append(sketch.text) + for project in projects: + if 'copy' in project: + assert self.get_element(By.CSS_SELECTOR, + '.sketch-block-cloned-from').text == \ + "Cloned from Sketch publicSketch1 by demo_user" + def test_delete(self, tester_login): try: sketches = self.find_all('#project_list > li \ From 0fa143b0fbded86d11cd808621ab5b08102a71d6 Mon Sep 17 00:00:00 2001 From: konstantina Date: Thu, 11 Aug 2016 12:39:50 +0300 Subject: [PATCH 22/29] Updated utils functions change_name and change_name_editor. --- codebender_testing/utils.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/codebender_testing/utils.py b/codebender_testing/utils.py index 5ed1c8a..0a58977 100644 --- a/codebender_testing/utils.py +++ b/codebender_testing/utils.py @@ -920,7 +920,6 @@ def change_name(self, name): nameField = self.get_element(By.CSS_SELECTOR,'#create-sketch-modal .modal-body [id="create-sketch-name"') nameField.clear() nameField.send_keys(name) - nameField.send_keys(Keys.ENTER) def change_name_editor(self, name): sketchHeading = self.get_element(By.ID, 'editor_heading_project_name') @@ -945,7 +944,6 @@ def change_short_description(self, description): nameField = self.get_element(By.CSS_SELECTOR,'#create-sketch-modal-short-description') nameField.clear() nameField.send_keys(description) - nameField.send_keys(Keys.ENTER) def change_short_description_editor(self, description): editDescription = self.get_element(By.CSS_SELECTOR,'.short-description-edit') From b881a828f983267b0eb443614416ba60f3cdbec8 Mon Sep 17 00:00:00 2001 From: konstantina Date: Thu, 11 Aug 2016 13:01:22 +0300 Subject: [PATCH 23/29] Added test for sketch rename inside editor. --- tests/common/sketch/test_sketch.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/common/sketch/test_sketch.py b/tests/common/sketch/test_sketch.py index 0c66f1b..bc1ed4e 100644 --- a/tests/common/sketch/test_sketch.py +++ b/tests/common/sketch/test_sketch.py @@ -30,6 +30,8 @@ def create_test_project(self, tester_login): def test_rename_project(self): self.change_name_editor(TEST_PROJECT_NAME) + sketchHeading = self.get_element(By.ID, 'editor_heading_project_name') + assert sketchHeading.text == TEST_PROJECT_NAME def test_change_short_description(self): self.change_short_description_editor('description') From 211cb29d846beedda5980f46ce0a8f107ed206d4 Mon Sep 17 00:00:00 2001 From: konstantina Date: Thu, 11 Aug 2016 13:25:47 +0300 Subject: [PATCH 24/29] Added test that short_description is updated inside editor. --- tests/common/sketch/test_sketch.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/common/sketch/test_sketch.py b/tests/common/sketch/test_sketch.py index bc1ed4e..2e4846f 100644 --- a/tests/common/sketch/test_sketch.py +++ b/tests/common/sketch/test_sketch.py @@ -35,6 +35,8 @@ def test_rename_project(self): def test_change_short_description(self): self.change_short_description_editor('description') + description = self.get_element(By.ID,'short-description') + assert description.text == 'description' def test_verify_code(self): """Ensures that we can compile code and see the success message.""" From 9fec384f9e385ce3981b766d9982c6f5a56710ea Mon Sep 17 00:00:00 2001 From: konstantina Date: Thu, 11 Aug 2016 14:52:53 +0300 Subject: [PATCH 25/29] Added test for file rename in editor. --- tests/common/sketch/test_sketch.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/common/sketch/test_sketch.py b/tests/common/sketch/test_sketch.py index 2e4846f..2583f02 100644 --- a/tests/common/sketch/test_sketch.py +++ b/tests/common/sketch/test_sketch.py @@ -150,6 +150,30 @@ def test_add_projectfile_direct(self): ) assert 'test_file.txt' in self.driver.page_source + def test_rename_projectfile_direct(self): + # Tests that a file that was added to project can be renamed + rename_button = self.get_element(By.CSS_SELECTOR, + '#files_list .rename-file-button') + rename_button.click() + WebDriverWait(self.driver, VERIFY_TIMEOUT).until( + expected_conditions.visibility_of( + self.get_element(By.ID, "filenameModal") + ) + ) + filename = self.driver.find_element_by_id("newFilename") + filename.clear() + filename.send_keys('test.txt') + save_button = self.get_element(By.ID, 'renamebutton') + save_button.click() + operation_output = self.get_element(By.ID, "operation_output") + assert 'File successfully renamed.' in operation_output.text + WebDriverWait(self.driver, VERIFY_TIMEOUT).until( + expected_conditions.invisibility_of_element_located( + (By.ID, "filenameModal") + ) + ) + assert 'test.txt' in self.driver.page_source + def test_delete_file(self): """Tests file delete modal """ delete_file_button = self.get_element(By.CLASS_NAME, 'delete-file-button') From b5c8aaa807c5d46241c686f7835f40fdad170e2e Mon Sep 17 00:00:00 2001 From: konstantina Date: Thu, 11 Aug 2016 14:53:25 +0300 Subject: [PATCH 26/29] Updated delete file function inside editor. Function now waits until x icon is clickable. --- tests/common/sketch/test_sketch.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/common/sketch/test_sketch.py b/tests/common/sketch/test_sketch.py index 2583f02..a9d54a7 100644 --- a/tests/common/sketch/test_sketch.py +++ b/tests/common/sketch/test_sketch.py @@ -176,7 +176,14 @@ def test_rename_projectfile_direct(self): def test_delete_file(self): """Tests file delete modal """ - delete_file_button = self.get_element(By.CLASS_NAME, 'delete-file-button') + WebDriverWait(self.driver, VERIFY_TIMEOUT).until( + expected_conditions.element_to_be_clickable( + (By.CSS_SELECTOR, + '#files_list .delete-file-button .icon-remove') + ) + ) + delete_file_button = self.get_element(By.CSS_SELECTOR, + '#files_list .delete-file-button .icon-remove') delete_file_button.click() WebDriverWait(self.driver, VERIFY_TIMEOUT).until( expected_conditions.visibility_of( From 3f32f26472f911b2bb5675460448d39520a214c6 Mon Sep 17 00:00:00 2001 From: konstantina Date: Thu, 11 Aug 2016 15:00:18 +0300 Subject: [PATCH 27/29] Reformatted code of test_sketch.py --- tests/common/sketch/test_sketch.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/common/sketch/test_sketch.py b/tests/common/sketch/test_sketch.py index a9d54a7..2d24257 100644 --- a/tests/common/sketch/test_sketch.py +++ b/tests/common/sketch/test_sketch.py @@ -26,7 +26,8 @@ class TestSketch(SeleniumTestCase): def create_test_project(self, tester_login): """Makes sure we are logged in and have a project open before performing any of these tests.""" - self.create_sketch('public' , TEST_PROJECT_NAME + '_initial', 'short description') + self.create_sketch('public' , TEST_PROJECT_NAME + '_initial', + 'short description') def test_rename_project(self): self.change_name_editor(TEST_PROJECT_NAME) @@ -40,7 +41,8 @@ def test_change_short_description(self): def test_verify_code(self): """Ensures that we can compile code and see the success message.""" - boards = ['Arduino Uno', 'Arduino Leonardo', 'Arduino Mega 2560 or Mega ADK'] + boards = ['Arduino Uno', 'Arduino Leonardo', + 'Arduino Mega 2560 or Mega ADK'] for board in boards: self.execute_script(SELECT_BOARD_SCRIPT(board)) compile_button = self.get_element(By.ID, "cb_cf_verify_btn") @@ -51,7 +53,8 @@ def test_verify_code(self): (By.ID, "progress")) ) - operation_output = self.driver.find_element_by_id('operation_output') + operation_output = \ + self.driver.find_element_by_id('operation_output') assert operation_output.text.strip() == 'Verification successful!' throttle_compile() @@ -89,7 +92,8 @@ def test_speeds_dropdown(self): def test_serial_monitor_disables_fields(self): """Tests that opening the serial monitor disables the port and baudrate fields.""" - open_serial_monitor_button = self.get_element(By.ID, 'cb_cf_serial_monitor_connect') + open_serial_monitor_button = self.get_element(By.ID, + 'cb_cf_serial_monitor_connect') open_serial_monitor_button.click() WebDriverWait(self.driver, FLASH_TIMEOUT).until( From 45e3c43e0dc2fbd17155aaf841671ef3cc8ac1c4 Mon Sep 17 00:00:00 2001 From: konstantina Date: Thu, 11 Aug 2016 15:32:47 +0300 Subject: [PATCH 28/29] Added function to change project privacy in editor. --- codebender_testing/utils.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/codebender_testing/utils.py b/codebender_testing/utils.py index 0a58977..b83926a 100644 --- a/codebender_testing/utils.py +++ b/codebender_testing/utils.py @@ -27,7 +27,7 @@ from codebender_testing.config import get_path from codebender_testing.config import jsondump from codebender_testing.disqus import DisqusWrapper - +from selenium.webdriver.common.action_chains import ActionChains # Time to wait until we give up on a DOM property becoming available. DOM_PROPERTY_DEFINED_TIMEOUT = 30 @@ -916,6 +916,21 @@ def change_privacy(self, privacy): privateRadioButton = self.get_element(By.CSS_SELECTOR,'#create-sketch-modal-type-controls [value="private"]') privateRadioButton.click() + def change_privacy_editor(self, privacy): + driver=self.driver + if privacy == 'private': + privacy = self.get_element(By.CSS_SELECTOR,'#editor_heading_privacy_icon .cb-icon-globe-inv') + actions = ActionChains(driver) + actions.move_to_element(privacy) + actions.double_click(privacy) + actions.perform() + else: + privacy = self.get_element(By.CSS_SELECTOR,'#editor_heading_privacy_icon .icon-lock') + actions = ActionChains(driver) + actions.move_to_element(privacy) + actions.double_click(privacy) + actions.perform() + def change_name(self, name): nameField = self.get_element(By.CSS_SELECTOR,'#create-sketch-modal .modal-body [id="create-sketch-name"') nameField.clear() From 97eb8e069ac79521d4922f9644a42bfb8c2a0bd6 Mon Sep 17 00:00:00 2001 From: konstantina Date: Thu, 11 Aug 2016 15:33:23 +0300 Subject: [PATCH 29/29] Added test that changes privacy in editor. --- tests/common/sketch/test_sketch.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/common/sketch/test_sketch.py b/tests/common/sketch/test_sketch.py index 2d24257..9a9333d 100644 --- a/tests/common/sketch/test_sketch.py +++ b/tests/common/sketch/test_sketch.py @@ -29,6 +29,14 @@ def create_test_project(self, tester_login): self.create_sketch('public' , TEST_PROJECT_NAME + '_initial', 'short description') + def test_change_privacy(self): + self.change_privacy_editor('private') + assert self.get_element(By.CSS_SELECTOR, + '#editor_heading_privacy_icon .icon-lock') + self.change_privacy_editor('public') + assert self.get_element(By.CSS_SELECTOR, + '#editor_heading_privacy_icon .cb-icon-globe-inv') + def test_rename_project(self): self.change_name_editor(TEST_PROJECT_NAME) sketchHeading = self.get_element(By.ID, 'editor_heading_project_name')