diff --git a/.travis.yml b/.travis.yml index fed0e1639..958b7431e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,24 @@ language: python + +env: + - MOZ_HEADLESS=1 + +addons: + firefox: "55.0" + python: - "3.6.5" + 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 makemigrations auth volunteer administrator organization event job shift registration - 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 219573533..59c136163 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 3f5e120d2..adda940b2 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 30480b90c..433f290a7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,8 +6,8 @@ flake8 == 3.4.1 psycopg2 == 2.7.3 PyYAML == 3.11 requests == 2.7.0 -selenium == 2.53.1 phonenumbers == 8.8.8 +selenium == 3.4.0 django-cities-light == 3.2.0 Unidecode == 0.4.19 django-braces == 1.9.0 diff --git a/vms/administrator/tests/test_selenium_working.py b/vms/administrator/tests/test_selenium_working.py new file mode 100644 index 000000000..13d6c58cf --- /dev/null +++ b/vms/administrator/tests/test_selenium_working.py @@ -0,0 +1,43 @@ +# 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 selenium is working correctly. + Delete this file after uncommenting the selenium tests + currently present. + """ + + @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) +