diff --git a/.travis.yml b/.travis.yml index df46212..90428cc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,24 @@ language: python + +env: + - MOZ_HEADLESS=1 + +addons: + firefox: "55.0" + python: - "2.7" + services: postgresql + +before_install: + - wget https://github.com/mozilla/geckodriver/releases/download/v0.20.1/geckodriver-v0.20.1-linux64.tar.gz + - tar -xzvf geckodriver-v0.20.1-linux64.tar.gz + - sudo mv geckodriver /usr/local/bin + install: - pip install -r requirements.txt + before_script: - psql -c "create role vmsadmin with createrole createdb login password '0xdeadbeef';" -U postgres - psql -c "CREATE DATABASE vms;" -U postgres @@ -11,10 +26,13 @@ before_script: - "sh -e /etc/init.d/xvfb start" - sleep 3 - export DJANGO_SECRET_KEY=foobarbaz + script: - cd vms - python manage.py syncdb --noinput - python manage.py migrate --noinput --traceback --settings=vms.settings - - coverage run --source='.' manage.py test + - coverage run --source='.' manage.py test -v 2 + - coverage report -m + after_success: coveralls --rcfile=.coveragerc diff --git a/aut_docs/Setup.md b/aut_docs/Setup.md index 2195735..59c1361 100644 --- a/aut_docs/Setup.md +++ b/aut_docs/Setup.md @@ -9,7 +9,8 @@ - `cd vms` - To run, `python manage.py runserver`. Browse `http://127.0.0.1:8000` -- To execute tests `python manage.py test`. This will run all unit-tests and +- Before running tests, make sure to download the latest geckodriver. Unpack and move the binary to `/usr/local/bin` +- To execute tests `python manage.py test`. This will run all selenium tests, unit-tests and all functional-tests across all apps. To execute tests of only a particular app, run `python manage.py test ` - If all tests pass, `OK` will be received at the end. diff --git a/docs/Installation_Guide.md b/docs/Installation_Guide.md index 3f5e120..adda940 100644 --- a/docs/Installation_Guide.md +++ b/docs/Installation_Guide.md @@ -259,13 +259,17 @@ There needs to be at least one organization in the `organization_organization` t Make sure to exit the postgres client before proceeding to the next steps: +``` \q +``` ## Change Directory Permissions You will have to change the permissions on the **/srv** directory to read, write and execute (**/srv** is the directory where Volunteer resumes are uploaded and stored). To do this, run the following command: +``` sudo chmod 777 /srv +``` NOTE: In case you can the error "/srv: No such file or directory" while running the above comment do the following sudo mkdir /srv @@ -278,26 +282,57 @@ Change directory to where you can find the **manage.py** file (this is located i Start the development server by running the command (this runs the development server on the VM): +``` python manage.py runserver [::]:8000 +``` You can now try out the project by going to [http://localhost:8001/home](http://localhost:8001/home) on a browser on your local machine. -## Run Unit and Functional Tests +## Download and Set Geckodriver +To run tests it is essential that you have geckodriver downloaded and set in your path. + +Download Geckodriver: + +```bash +wget https://github.com/mozilla/geckodriver/releases/download/v0.20.1/geckodriver-v0.20.1-linux64.tar.gz +``` + +Unpack it: + +```bash +tar -xzvf geckodriver-v0.20.1-linux64.tar.gz +``` + +Set it in your path + +```bash +sudo mv geckodriver /usr/local/bin +``` + + +## Run Unit, Functional and Selenium Tests You can also run unit and functional tests by running the command: +``` python manage.py test name_of_app_here +``` + For example, in the project, there are Django apps called volunteer, job, shift and organization. You can run tests for these apps individually by running these commands separately: + ``` python manage.py test volunteer ``` + ``` python manage.py test job ``` + ``` python manage.py test shift ``` + ``` python manage.py test organization ``` @@ -309,25 +344,32 @@ For example, if you want to run unit tests for the event app: python manage.py test event.tests.test_services ``` -Smilarly, for job app it would be: +Similarly, for job app it would be: ``` python manage.py test job.tests.test_services ``` If you want to run all unit tests, run this command: +``` python manage.py test +``` Once you are done with testing out and running the project, you may want to exit the VM and suspend or shut it down by running these commands: Exit out of the ssh session with the VM by running: - exit - +``` +exit +``` To put the VM in suspend mode, run the command: - vagrant suspend +``` +vagrant suspend +``` Alternatively, to shut down the VM, run the command: - vagrant halt +``` +vagrant halt +``` diff --git a/requirements.txt b/requirements.txt index 245c6dd..bc07a62 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ flake8 == 3.4.1 psycopg2 == 2.7.3 PyYAML == 3.11 requests == 2.7.0 -selenium == 2.53.1 +selenium == 3.4.0 phonenumbers == 7.2.6 django-cities-light == 3.2.0 Unidecode == 0.4.19 diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/administrator/__init__.py b/tests/administrator/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/administrator/test_working.py b/tests/administrator/test_working.py deleted file mode 100644 index 742cec4..0000000 --- a/tests/administrator/test_working.py +++ /dev/null @@ -1,41 +0,0 @@ -# Third Party Imports -from selenium import webdriver - -# Django imports -from django.contrib.staticfiles.testing import LiveServerTestCase - -# Local Project Imports -from selenium.webdriver.common.keys import Keys - - -class DummyTesting(LiveServerTestCase): - """ - Dummy Test Class to check the tests are working correctly. - """ - - @classmethod - def setUpClass(cls): - cls.driver = webdriver.Firefox() - cls.driver.implicitly_wait(5) - cls.driver.maximize_window() - super(DummyTesting, cls).setUpClass() - - @classmethod - def tearDownClass(cls): - cls.driver.quit() - super(DummyTesting, cls).tearDownClass() - - def test_working(self): - """ - Dummy Test function to check working of selenium - Delete this function after the first test for this - Class is added. - """ - self.driver.get("http://www.python.org") - self.assertIn('Python', self.driver.title) - element = self.driver.find_element_by_name('q') - element.clear() - element.send_keys('pycon') - element.send_keys(Keys.RETURN) - self.assertNotIn('No results found.', self.driver.page_source - diff --git a/tests/authentication/__init__.py b/tests/authentication/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/event/__init__.py b/tests/event/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/event/test_working.py b/tests/event/test_working.py deleted file mode 100644 index 742cec4..0000000 --- a/tests/event/test_working.py +++ /dev/null @@ -1,41 +0,0 @@ -# Third Party Imports -from selenium import webdriver - -# Django imports -from django.contrib.staticfiles.testing import LiveServerTestCase - -# Local Project Imports -from selenium.webdriver.common.keys import Keys - - -class DummyTesting(LiveServerTestCase): - """ - Dummy Test Class to check the tests are working correctly. - """ - - @classmethod - def setUpClass(cls): - cls.driver = webdriver.Firefox() - cls.driver.implicitly_wait(5) - cls.driver.maximize_window() - super(DummyTesting, cls).setUpClass() - - @classmethod - def tearDownClass(cls): - cls.driver.quit() - super(DummyTesting, cls).tearDownClass() - - def test_working(self): - """ - Dummy Test function to check working of selenium - Delete this function after the first test for this - Class is added. - """ - self.driver.get("http://www.python.org") - self.assertIn('Python', self.driver.title) - element = self.driver.find_element_by_name('q') - element.clear() - element.send_keys('pycon') - element.send_keys(Keys.RETURN) - self.assertNotIn('No results found.', self.driver.page_source - diff --git a/tests/home/__init__.py b/tests/home/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/home/test_working.py b/tests/home/test_working.py deleted file mode 100644 index 742cec4..0000000 --- a/tests/home/test_working.py +++ /dev/null @@ -1,41 +0,0 @@ -# Third Party Imports -from selenium import webdriver - -# Django imports -from django.contrib.staticfiles.testing import LiveServerTestCase - -# Local Project Imports -from selenium.webdriver.common.keys import Keys - - -class DummyTesting(LiveServerTestCase): - """ - Dummy Test Class to check the tests are working correctly. - """ - - @classmethod - def setUpClass(cls): - cls.driver = webdriver.Firefox() - cls.driver.implicitly_wait(5) - cls.driver.maximize_window() - super(DummyTesting, cls).setUpClass() - - @classmethod - def tearDownClass(cls): - cls.driver.quit() - super(DummyTesting, cls).tearDownClass() - - def test_working(self): - """ - Dummy Test function to check working of selenium - Delete this function after the first test for this - Class is added. - """ - self.driver.get("http://www.python.org") - self.assertIn('Python', self.driver.title) - element = self.driver.find_element_by_name('q') - element.clear() - element.send_keys('pycon') - element.send_keys(Keys.RETURN) - self.assertNotIn('No results found.', self.driver.page_source - diff --git a/tests/job/__init__.py b/tests/job/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/job/test_working.py b/tests/job/test_working.py deleted file mode 100644 index 742cec4..0000000 --- a/tests/job/test_working.py +++ /dev/null @@ -1,41 +0,0 @@ -# Third Party Imports -from selenium import webdriver - -# Django imports -from django.contrib.staticfiles.testing import LiveServerTestCase - -# Local Project Imports -from selenium.webdriver.common.keys import Keys - - -class DummyTesting(LiveServerTestCase): - """ - Dummy Test Class to check the tests are working correctly. - """ - - @classmethod - def setUpClass(cls): - cls.driver = webdriver.Firefox() - cls.driver.implicitly_wait(5) - cls.driver.maximize_window() - super(DummyTesting, cls).setUpClass() - - @classmethod - def tearDownClass(cls): - cls.driver.quit() - super(DummyTesting, cls).tearDownClass() - - def test_working(self): - """ - Dummy Test function to check working of selenium - Delete this function after the first test for this - Class is added. - """ - self.driver.get("http://www.python.org") - self.assertIn('Python', self.driver.title) - element = self.driver.find_element_by_name('q') - element.clear() - element.send_keys('pycon') - element.send_keys(Keys.RETURN) - self.assertNotIn('No results found.', self.driver.page_source - diff --git a/tests/organization/__init__.py b/tests/organization/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/organization/test_working.py b/tests/organization/test_working.py deleted file mode 100644 index 742cec4..0000000 --- a/tests/organization/test_working.py +++ /dev/null @@ -1,41 +0,0 @@ -# Third Party Imports -from selenium import webdriver - -# Django imports -from django.contrib.staticfiles.testing import LiveServerTestCase - -# Local Project Imports -from selenium.webdriver.common.keys import Keys - - -class DummyTesting(LiveServerTestCase): - """ - Dummy Test Class to check the tests are working correctly. - """ - - @classmethod - def setUpClass(cls): - cls.driver = webdriver.Firefox() - cls.driver.implicitly_wait(5) - cls.driver.maximize_window() - super(DummyTesting, cls).setUpClass() - - @classmethod - def tearDownClass(cls): - cls.driver.quit() - super(DummyTesting, cls).tearDownClass() - - def test_working(self): - """ - Dummy Test function to check working of selenium - Delete this function after the first test for this - Class is added. - """ - self.driver.get("http://www.python.org") - self.assertIn('Python', self.driver.title) - element = self.driver.find_element_by_name('q') - element.clear() - element.send_keys('pycon') - element.send_keys(Keys.RETURN) - self.assertNotIn('No results found.', self.driver.page_source - diff --git a/tests/pom/__init__.py b/tests/pom/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/pom/test_working.py b/tests/pom/test_working.py deleted file mode 100644 index 742cec4..0000000 --- a/tests/pom/test_working.py +++ /dev/null @@ -1,41 +0,0 @@ -# Third Party Imports -from selenium import webdriver - -# Django imports -from django.contrib.staticfiles.testing import LiveServerTestCase - -# Local Project Imports -from selenium.webdriver.common.keys import Keys - - -class DummyTesting(LiveServerTestCase): - """ - Dummy Test Class to check the tests are working correctly. - """ - - @classmethod - def setUpClass(cls): - cls.driver = webdriver.Firefox() - cls.driver.implicitly_wait(5) - cls.driver.maximize_window() - super(DummyTesting, cls).setUpClass() - - @classmethod - def tearDownClass(cls): - cls.driver.quit() - super(DummyTesting, cls).tearDownClass() - - def test_working(self): - """ - Dummy Test function to check working of selenium - Delete this function after the first test for this - Class is added. - """ - self.driver.get("http://www.python.org") - self.assertIn('Python', self.driver.title) - element = self.driver.find_element_by_name('q') - element.clear() - element.send_keys('pycon') - element.send_keys(Keys.RETURN) - self.assertNotIn('No results found.', self.driver.page_source - diff --git a/tests/registration/__init__.py b/tests/registration/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/registration/test_working.py b/tests/registration/test_working.py deleted file mode 100644 index 742cec4..0000000 --- a/tests/registration/test_working.py +++ /dev/null @@ -1,41 +0,0 @@ -# Third Party Imports -from selenium import webdriver - -# Django imports -from django.contrib.staticfiles.testing import LiveServerTestCase - -# Local Project Imports -from selenium.webdriver.common.keys import Keys - - -class DummyTesting(LiveServerTestCase): - """ - Dummy Test Class to check the tests are working correctly. - """ - - @classmethod - def setUpClass(cls): - cls.driver = webdriver.Firefox() - cls.driver.implicitly_wait(5) - cls.driver.maximize_window() - super(DummyTesting, cls).setUpClass() - - @classmethod - def tearDownClass(cls): - cls.driver.quit() - super(DummyTesting, cls).tearDownClass() - - def test_working(self): - """ - Dummy Test function to check working of selenium - Delete this function after the first test for this - Class is added. - """ - self.driver.get("http://www.python.org") - self.assertIn('Python', self.driver.title) - element = self.driver.find_element_by_name('q') - element.clear() - element.send_keys('pycon') - element.send_keys(Keys.RETURN) - self.assertNotIn('No results found.', self.driver.page_source - diff --git a/tests/shift/__init__.py b/tests/shift/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/shift/test_working.py b/tests/shift/test_working.py deleted file mode 100644 index 742cec4..0000000 --- a/tests/shift/test_working.py +++ /dev/null @@ -1,41 +0,0 @@ -# Third Party Imports -from selenium import webdriver - -# Django imports -from django.contrib.staticfiles.testing import LiveServerTestCase - -# Local Project Imports -from selenium.webdriver.common.keys import Keys - - -class DummyTesting(LiveServerTestCase): - """ - Dummy Test Class to check the tests are working correctly. - """ - - @classmethod - def setUpClass(cls): - cls.driver = webdriver.Firefox() - cls.driver.implicitly_wait(5) - cls.driver.maximize_window() - super(DummyTesting, cls).setUpClass() - - @classmethod - def tearDownClass(cls): - cls.driver.quit() - super(DummyTesting, cls).tearDownClass() - - def test_working(self): - """ - Dummy Test function to check working of selenium - Delete this function after the first test for this - Class is added. - """ - self.driver.get("http://www.python.org") - self.assertIn('Python', self.driver.title) - element = self.driver.find_element_by_name('q') - element.clear() - element.send_keys('pycon') - element.send_keys(Keys.RETURN) - self.assertNotIn('No results found.', self.driver.page_source - diff --git a/tests/volunteer/__init__.py b/tests/volunteer/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/volunteer/test_working.py b/tests/volunteer/test_working.py deleted file mode 100644 index 742cec4..0000000 --- a/tests/volunteer/test_working.py +++ /dev/null @@ -1,41 +0,0 @@ -# Third Party Imports -from selenium import webdriver - -# Django imports -from django.contrib.staticfiles.testing import LiveServerTestCase - -# Local Project Imports -from selenium.webdriver.common.keys import Keys - - -class DummyTesting(LiveServerTestCase): - """ - Dummy Test Class to check the tests are working correctly. - """ - - @classmethod - def setUpClass(cls): - cls.driver = webdriver.Firefox() - cls.driver.implicitly_wait(5) - cls.driver.maximize_window() - super(DummyTesting, cls).setUpClass() - - @classmethod - def tearDownClass(cls): - cls.driver.quit() - super(DummyTesting, cls).tearDownClass() - - def test_working(self): - """ - Dummy Test function to check working of selenium - Delete this function after the first test for this - Class is added. - """ - self.driver.get("http://www.python.org") - self.assertIn('Python', self.driver.title) - element = self.driver.find_element_by_name('q') - element.clear() - element.send_keys('pycon') - element.send_keys(Keys.RETURN) - self.assertNotIn('No results found.', self.driver.page_source - diff --git a/tests/authentication/test_working.py b/vms/administrator/tests/test_selenium_working.py similarity index 87% rename from tests/authentication/test_working.py rename to vms/administrator/tests/test_selenium_working.py index 742cec4..13d6c58 100644 --- a/tests/authentication/test_working.py +++ b/vms/administrator/tests/test_selenium_working.py @@ -10,7 +10,9 @@ class DummyTesting(LiveServerTestCase): """ - Dummy Test Class to check the tests are working correctly. + Dummy Test Class to check the selenium is working correctly. + Delete this file after uncommenting the selenium tests + currently present. """ @classmethod @@ -37,5 +39,5 @@ def test_working(self): element.clear() element.send_keys('pycon') element.send_keys(Keys.RETURN) - self.assertNotIn('No results found.', self.driver.page_source + self.assertNotIn('No results found.', self.driver.page_source)