def test_dataset_is_public_and_has_data(self):
        ''' We can accurately tell if a dataset is public and has data.
        '''
        # create a department
        department = Department.create(name="B Police Department", short_name="BPD", load_defaults=True)

        # none of the datasets have data, so they should all return false
        assert department.dataset_is_public_and_has_data("complaints") == False
        assert department.dataset_is_public_and_has_data("uof") == False
        assert department.dataset_is_public_and_has_data("ois") == False
        assert department.dataset_is_public_and_has_data("assaults") == False
        # the total count should be zero
        assert department.displayable_dataset_count() == 0

        # create incidents and verify that the datasets are now displayable
        CitizenComplaintBPD.create(department_id=department.id, opaque_id="12345abcde")
        assert department.dataset_is_public_and_has_data("complaints") == True
        assert department.displayable_dataset_count() == 1

        UseOfForceIncidentBPD.create(department_id=department.id, opaque_id="23456bcdef")
        assert department.dataset_is_public_and_has_data("uof") == True
        assert department.displayable_dataset_count() == 2

        OfficerInvolvedShootingBPD.create(department_id=department.id, opaque_id="34567cdefg")
        assert department.dataset_is_public_and_has_data("ois") == True
        assert department.displayable_dataset_count() == 3

        # now make them all not public, and they should be false again
        department.is_public_citizen_complaints = False
        assert department.dataset_is_public_and_has_data("complaints") == False
        department.is_public_use_of_force_incidents = False
        assert department.dataset_is_public_and_has_data("uof") == False
        department.is_public_officer_involved_shootings = False
        assert department.dataset_is_public_and_has_data("ois") == False
        assert department.displayable_dataset_count() == 0
Пример #2
0
    def test_dataset_is_public_and_has_data(self):
        ''' We can accurately tell if a dataset is public and has data.
        '''
        # create a department
        department = Department.create(name="B Police Department",
                                       short_name="BPD",
                                       load_defaults=True)

        # none of the datasets have data, so they should all return false
        assert department.dataset_is_public_and_has_data("complaints") == False
        assert department.dataset_is_public_and_has_data("uof") == False
        assert department.dataset_is_public_and_has_data("ois") == False
        assert department.dataset_is_public_and_has_data("assaults") == False

        # create incidents and verify that the datasets are now displayable
        CitizenComplaintBPD.create(department_id=department.id,
                                   opaque_id="12345abcde")
        assert department.dataset_is_public_and_has_data("complaints") == True

        UseOfForceIncidentBPD.create(department_id=department.id,
                                     opaque_id="23456bcdef")
        assert department.dataset_is_public_and_has_data("uof") == True

        OfficerInvolvedShootingBPD.create(department_id=department.id,
                                          opaque_id="34567cdefg")
        assert department.dataset_is_public_and_has_data("ois") == True

        # now make them all not public, and they should be false again
        department.is_public_citizen_complaints = False
        assert department.dataset_is_public_and_has_data("complaints") == False
        department.is_public_use_of_force_incidents = False
        assert department.dataset_is_public_and_has_data("uof") == False
        department.is_public_officer_involved_shootings = False
        assert department.dataset_is_public_and_has_data("ois") == False
Пример #3
0
    def test_non_public_depts_display_for_users_with_access(self, testapp):
        ''' Users can see links to datasets they're allowed to access on the front page
        '''
        impd = Department.create(name="I Police Department",
                                 short_name="IMPD",
                                 is_public=True)
        UseOfForceIncidentIMPD.create(department_id=impd.id,
                                      opaque_id="12345abcde")
        bpd = Department.create(name="B Police Department",
                                short_name="BPD",
                                is_public=False)
        UseOfForceIncidentBPD.create(department_id=bpd.id,
                                     opaque_id="12345abcde")
        lmpd = Department.create(name="LM Police Department",
                                 short_name="LMPD",
                                 is_public=False)
        UseOfForceIncidentLMPD.create(department_id=lmpd.id,
                                      opaque_id="12345abcde")

        # A non logged-in user can only see the public department
        response = testapp.get("/", status=200)
        soup = BeautifulSoup(response.text)
        assert soup.find("a", href="/department/IMPD/useofforce") is not None
        assert soup.find("a", href="/department/BPD/useofforce") is None
        assert soup.find("a", href="/department/LMPD/useofforce") is None

        # A user associated with a particular department can see that department's
        # available datasets when logged in
        create_and_log_in_user(testapp=testapp,
                               department=bpd,
                               username="******")
        response = testapp.get("/", status=200)
        soup = BeautifulSoup(response.text)
        assert soup.find("a", href="/department/IMPD/useofforce") is not None
        assert soup.find("a", href="/department/BPD/useofforce") is not None
        assert soup.find("a", href="/department/LMPD/useofforce") is None

        # A user with admin access can see all departments' available datasets
        create_and_log_in_user(testapp=testapp,
                               department=impd,
                               rolename='admin',
                               username="******")
        response = testapp.get("/", status=200)
        soup = BeautifulSoup(response.text)
        assert soup.find("a", href="/department/IMPD/useofforce") is not None
        assert soup.find("a", href="/department/BPD/useofforce") is not None
        assert soup.find("a", href="/department/LMPD/useofforce") is not None

        # Log out and only the public department should be visible
        testapp.get(url_for('public.logout')).follow()
        response = testapp.get("/", status=200)
        soup = BeautifulSoup(response.text)
        assert soup.find("a", href="/department/IMPD/useofforce") is not None
        assert soup.find("a", href="/department/BPD/useofforce") is None
        assert soup.find("a", href="/department/LMPD/useofforce") is None
Пример #4
0
    def test_all_dept_links(self, testapp):
        department = Department.create(name="B Police Department", short_name="BPD", is_public=True)
        CitizenComplaintBPD.create(department_id=department.id, opaque_id="12345abcde")
        UseOfForceIncidentBPD.create(department_id=department.id, opaque_id="23456bcdef")
        OfficerInvolvedShootingBPD.create(department_id=department.id, opaque_id="34567cdefg")

        response = testapp.get("/", status=200)
        soup = BeautifulSoup(response.text)
        assert soup.find("a", href="/department/BPD/complaints") is not None
        assert soup.find("a", href="/department/BPD/useofforce") is not None
        assert soup.find("a", href="/department/BPD/officerinvolvedshootings") is not None
Пример #5
0
    def test_multiple_depts_display(self, testapp):
        impd = Department.create(name="I Police Department", short_name="IMPD", is_public=True)
        UseOfForceIncidentIMPD.create(department_id=impd.id, opaque_id="12345abcde")
        bpd = Department.create(name="B Police Department", short_name="BPD", is_public=True)
        UseOfForceIncidentBPD.create(department_id=bpd.id, opaque_id="12345abcde")
        lmpd = Department.create(name="LM Police Department", short_name="LMPD", is_public=False)
        UseOfForceIncidentLMPD.create(department_id=lmpd.id, opaque_id="12345abcde")

        response = testapp.get("/", status=200)
        soup = BeautifulSoup(response.text)
        assert soup.find("a", href="/department/IMPD/useofforce") is not None
        assert soup.find("a", href="/department/BPD/useofforce") is not None
        assert soup.find("a", href="/department/LMPD/useofforce") is None
Пример #6
0
    def test_updated_text_on_schema_pages(self, testapp):
        ''' The notice of the last time a dataset was updated is on all schema pages
        '''
        department = Department.create(name="B Police Department",
                                       short_name="BPD",
                                       is_public=True)
        CitizenComplaintBPD.create(department_id=department.id,
                                   opaque_id="12345abcde")
        UseOfForceIncidentBPD.create(department_id=department.id,
                                     opaque_id="23456bcdef")
        OfficerInvolvedShootingBPD.create(department_id=department.id,
                                          opaque_id="34567cdefg")

        SRDepartment = Department.create(name="SR Police Department",
                                         short_name="SRPD",
                                         is_public=True)
        PursuitSRPD.create(department_id=SRDepartment.id,
                           opaque_id="45678defgh")

        extractor_password = '******'
        bpd_extractor, envs = Extractor.from_department_and_password(
            department=department, password=extractor_password)
        bpd_extractor.last_contact = datetime.datetime(2012, 9, 16)
        srpd_extractor, envs = Extractor.from_department_and_password(
            department=SRDepartment, password=extractor_password)
        srpd_extractor.last_contact = datetime.datetime(2014, 11, 2)

        response = testapp.get("/department/BPD/schema/complaints/")
        soup = BeautifulSoup(response.text)
        updated_span = soup.find("span", {"class": "updated"})
        assert updated_span is not None
        assert "Last Updated September 16, 2012" == updated_span.text

        response = testapp.get("/department/BPD/schema/useofforce/")
        soup = BeautifulSoup(response.text)
        updated_span = soup.find("span", {"class": "updated"})
        assert updated_span is not None
        assert "Last Updated September 16, 2012" == updated_span.text

        response = testapp.get(
            "/department/BPD/schema/officerinvolvedshootings/")
        soup = BeautifulSoup(response.text)
        updated_span = soup.find("span", {"class": "updated"})
        assert updated_span is not None
        assert "Last Updated September 16, 2012" == updated_span.text

        response = testapp.get("/department/SRPD/schema/pursuits/")
        soup = BeautifulSoup(response.text)
        updated_span = soup.find("span", {"class": "updated"})
        assert updated_span is not None
        assert "Last Updated November 02, 2014" == updated_span.text
Пример #7
0
    def test_all_dept_links(self, testapp):
        department = Department.create(name="B Police Department",
                                       short_name="BPD",
                                       is_public=True)
        CitizenComplaintBPD.create(department_id=department.id,
                                   opaque_id="12345abcde")
        UseOfForceIncidentBPD.create(department_id=department.id,
                                     opaque_id="23456bcdef")
        OfficerInvolvedShootingBPD.create(department_id=department.id,
                                          opaque_id="34567cdefg")

        response = testapp.get("/", status=200)
        soup = BeautifulSoup(response.text)
        assert soup.find("a", href="/department/BPD/complaints") is not None
        assert soup.find("a", href="/department/BPD/useofforce") is not None
        assert soup.find(
            "a", href="/department/BPD/officerinvolvedshootings") is not None
Пример #8
0
    def test_non_public_depts_display_for_users_with_access(self, testapp):
        """ Users can see links to datasets they're allowed to access on the front page
        """
        impd = Department.create(name="I Police Department", short_name="IMPD", is_public=True)
        UseOfForceIncidentIMPD.create(department_id=impd.id, opaque_id="12345abcde")
        bpd = Department.create(name="B Police Department", short_name="BPD", is_public=False)
        UseOfForceIncidentBPD.create(department_id=bpd.id, opaque_id="12345abcde")
        lmpd = Department.create(name="LM Police Department", short_name="LMPD", is_public=False)
        UseOfForceIncidentLMPD.create(department_id=lmpd.id, opaque_id="12345abcde")

        # A non logged-in user can only see the public department
        response = testapp.get("/", status=200)
        soup = BeautifulSoup(response.text)
        assert soup.find("a", href="/department/IMPD/useofforce") is not None
        assert soup.find("a", href="/department/BPD/useofforce") is None
        assert soup.find("a", href="/department/LMPD/useofforce") is None

        # A user associated with a particular department can see that department's
        # available datasets when logged in
        create_and_log_in_user(testapp=testapp, department=bpd, username="******")
        response = testapp.get("/", status=200)
        soup = BeautifulSoup(response.text)
        assert soup.find("a", href="/department/IMPD/useofforce") is not None
        assert soup.find("a", href="/department/BPD/useofforce") is not None
        assert soup.find("a", href="/department/LMPD/useofforce") is None

        # A user with admin access can see all departments' available datasets
        create_and_log_in_user(testapp=testapp, department=impd, rolename="admin", username="******")
        response = testapp.get("/", status=200)
        soup = BeautifulSoup(response.text)
        assert soup.find("a", href="/department/IMPD/useofforce") is not None
        assert soup.find("a", href="/department/BPD/useofforce") is not None
        assert soup.find("a", href="/department/LMPD/useofforce") is not None

        # Log out and only the public department should be visible
        testapp.get(url_for("public.logout")).follow()
        response = testapp.get("/", status=200)
        soup = BeautifulSoup(response.text)
        assert soup.find("a", href="/department/IMPD/useofforce") is not None
        assert soup.find("a", href="/department/BPD/useofforce") is None
        assert soup.find("a", href="/department/LMPD/useofforce") is None
Пример #9
0
    def test_multiple_depts_display(self, testapp):
        impd = Department.create(name="I Police Department",
                                 short_name="IMPD",
                                 is_public=True)
        UseOfForceIncidentIMPD.create(department_id=impd.id,
                                      opaque_id="12345abcde")
        bpd = Department.create(name="B Police Department",
                                short_name="BPD",
                                is_public=True)
        UseOfForceIncidentBPD.create(department_id=bpd.id,
                                     opaque_id="12345abcde")
        lmpd = Department.create(name="LM Police Department",
                                 short_name="LMPD",
                                 is_public=False)
        UseOfForceIncidentLMPD.create(department_id=lmpd.id,
                                      opaque_id="12345abcde")

        response = testapp.get("/", status=200)
        soup = BeautifulSoup(response.text)
        assert soup.find("a", href="/department/IMPD/useofforce") is not None
        assert soup.find("a", href="/department/BPD/useofforce") is not None
        assert soup.find("a", href="/department/LMPD/useofforce") is None