def test_script_creates_one_new_measure_version_and_updates_dimension_titles_for_two_dimensions(
        self, single_use_app, db_session
    ):
        user = UserFactory(user_type=TypeOfUser.ADMIN_USER, email="*****@*****.**")
        mv = MeasureVersionFactory.build(
            status="APPROVED", version="1.0", title="my measure", measure__id=1, uploads=[]
        )
        mv.dimensions = [
            DimensionFactory.build(guid="dimension-guid-1", title="my dimension 1"),
            DimensionFactory.build(guid="dimension-guid-2", title="my dimension 2"),
        ]
        db_session.session.add(mv)
        db_session.session.commit()

        dimension_rows = [
            ["dimension-guid-1", "my measure", "my dimension 1", "my new dimension 1"],
            ["dimension-guid-2", "my measure", "my dimension 2", "my new dimension 2"],
        ]

        import_dimension_titles(user_email=user.email, app=single_use_app, dimension_rows=dimension_rows)

        measure = Measure.query.get(1)

        assert len(measure.versions) == 2
        assert measure.versions[0].version == "1.1"
        assert measure.versions[0].status == "APPROVED"
        assert measure.versions[0].dimensions[0].title == "my new dimension 1"
        assert measure.versions[0].dimensions[1].title == "my new dimension 2"
        assert measure.versions[0].external_edit_summary == STANDARD_EDIT_SUMMARY

        assert measure.versions[1].version == "1.0"
        assert measure.versions[1].dimensions[0].title == "my dimension 1"
        assert measure.versions[1].dimensions[1].title == "my dimension 2"
    def test_new_measure_version_not_created_if_any_new_dimension_titles_are_blank(self, single_use_app, db_session):
        user = UserFactory(user_type=TypeOfUser.ADMIN_USER, email="*****@*****.**")
        mv = MeasureVersionFactory.build(
            status="APPROVED", version="1.0", title="my measure", measure__id=1, uploads=[]
        )
        mv.dimensions = [
            DimensionFactory.build(guid="dimension-guid-1", title="my dimension 1"),
            DimensionFactory.build(guid="dimension-guid-2", title="my dimension 2"),
        ]
        db_session.session.add(mv)
        db_session.session.commit()

        dimension_rows = [
            ["dimension-guid-1", "my measure", "my dimension 1", ""],
            ["dimension-guid-2", "my measure", "my dimension 2", "my new dimension 2"],
        ]

        error_count = import_dimension_titles(user_email=user.email, app=single_use_app, dimension_rows=dimension_rows)

        measure = Measure.query.get(1)

        assert error_count == 0
        assert len(measure.versions) == 1
        assert measure.versions[0].version == "1.0"
        assert measure.versions[0].dimensions[0].title == "my dimension 1"
        assert measure.versions[0].dimensions[1].title == "my dimension 2"
def test_secondary_source_can_be_added_and_removed(driver, live_server, government_departments, frequencies_of_release):
    rdu_user = UserFactory(user_type=TypeOfUser.RDU_USER, active=True)
    approved_measure_version = MeasureVersionFactory(
        status="APPROVED",
        data_sources__publisher=random.choice(government_departments),
        data_sources__frequency_of_release=random.choice(frequencies_of_release),
    )
    sample_measure_version = MeasureVersionFactory.build(data_sources=[])
    sample_data_source = DataSourceFactory.build(
        publisher__name=random.choice(government_departments).name,
        frequency_of_release__description=random.choice(frequencies_of_release).description,
    )

    # GIVEN a setup with Topic and Subtopic
    driver_login(driver, live_server, rdu_user)
    navigate_to_topic_page(driver, live_server, approved_measure_version.measure.subtopic.topic)

    # WHEN an editor creates and saves a new measure page
    measure_edit_page, page = create_measure_starting_at_topic_page(
        driver,
        live_server,
        approved_measure_version.measure.subtopic.topic,
        approved_measure_version.measure.subtopic,
        sample_measure_version,
        sample_data_source,
    )

    # Add and save a secondary data source
    measure_edit_page.click_add_secondary_data_source()

    fill_in(driver, label_text="Search for an existing data source", with_text="My data source")

    click_button_with_text(driver, "Search")

    click_link_with_text(driver, "Create a new data source")

    data_source_page = CreateDataSourcePage(driver)
    data_source_page.fill_data_source(sample_data_source)
    data_source_page.click_save()
    data_source_page.click_back()

    # Remove the secondary source
    measure_edit_page.click_remove_secondary_data_source()
Example #4
0
def test_can_reject_a_measure_in_review_as_editor(driver, live_server,
                                                  government_departments,
                                                  frequencies_of_release):
    rdu_user = UserFactory(user_type=TypeOfUser.RDU_USER, active=True)
    approved_measure_version = MeasureVersionFactory(
        status="APPROVED",
        data_sources__publisher=random.choice(government_departments),
        data_sources__frequency_of_release=random.choice(
            frequencies_of_release),
    )
    sample_measure_version = MeasureVersionFactory.build(data_sources=[])
    sample_data_source = DataSourceFactory.build(
        publisher__name=random.choice(government_departments).name,
        frequency_of_release__description=random.choice(
            frequencies_of_release).description,
    )

    # GIVEN a setup with Topic and Subtopic
    driver_login(driver, live_server, rdu_user)
    navigate_to_topic_page(driver, live_server,
                           approved_measure_version.measure.subtopic.topic)

    # WHEN an editor creates and saves a new measure page
    measure_edit_page, page = create_measure_starting_at_topic_page(
        driver,
        live_server,
        approved_measure_version.measure.subtopic.topic,
        approved_measure_version.measure.subtopic,
        sample_measure_version,
        sample_data_source,
    )

    # THEN the status should be draft
    assert measure_edit_page.is_current()
    assert measure_edit_page.get_status() == EXPECTED_STATUSES["draft"]

    # WHEN we save and send it to internal review
    measure_edit_page.click_save_and_send_to_review()

    # THEN the status should be internal review
    assert measure_edit_page.get_status(
    ) == EXPECTED_STATUSES["internal_review"]

    # WHEN we reject the page
    measure_edit_page.click_reject()

    # THEN the status should be rejected
    assert measure_edit_page.get_status() == EXPECTED_STATUSES["rejected"]

    # WHEN we send it back to a draft
    measure_edit_page.click_send_back_to_draft()

    # THEN the status should be draft
    driver.implicitly_wait(2)
    assert measure_edit_page.is_current()
    assert measure_edit_page.get_status() == EXPECTED_STATUSES["draft"]

    # WHEN we save and send it for department review
    measure_edit_page.click_save_and_send_to_review()
    measure_edit_page.click_department_review()

    # THEN the status should be department review
    driver.implicitly_wait(2)
    assert measure_edit_page.is_current()
    assert measure_edit_page.get_status(
    ) == EXPECTED_STATUSES["department_review"]

    # WHEN we reject the measure again
    measure_edit_page.click_reject()

    # THEN the status should be rejected
    driver.implicitly_wait(2)
    assert measure_edit_page.is_current()
    assert measure_edit_page.get_status() == EXPECTED_STATUSES["rejected"]

    measure_edit_page.log_out()
def test_create_a_measure_as_editor(driver, live_server,
                                    government_departments,
                                    frequencies_of_release):
    rdu_user = UserFactory(user_type=TypeOfUser.RDU_USER, active=True)
    admin_user = UserFactory(user_type=TypeOfUser.ADMIN_USER, active=True)
    approved_measure_version = MeasureVersionFactory(
        status="APPROVED",
        data_sources__publisher=random.choice(government_departments),
        data_sources__frequency_of_release=random.choice(
            frequencies_of_release),
    )
    sample_measure_version = MeasureVersionFactory.build(
        version="1.1", data_sources=[], update_corrects_data_mistake=True)
    sample_data_source = DataSourceFactory.build(
        publisher__name=random.choice(government_departments).name,
        frequency_of_release__description=random.choice(
            frequencies_of_release).description,
    )

    # GIVEN a setup with Topic and Subtopic
    driver_login(driver, live_server, rdu_user)
    navigate_to_topic_page(driver, live_server,
                           approved_measure_version.measure.subtopic.topic)

    # WHEN an editor creates and saves a new measure page
    measure_edit_page, page = create_measure_starting_at_topic_page(
        driver,
        live_server,
        approved_measure_version.measure.subtopic.topic,
        approved_measure_version.measure.subtopic,
        sample_measure_version,
        sample_data_source,
    )

    # THEN the status should be draft
    assert measure_edit_page.is_current()
    assert measure_edit_page.get_status() == EXPECTED_STATUSES["draft"]

    measure_edit_page.click_save_and_send_to_review()

    # THEN the status should be internal review
    assert measure_edit_page.is_current()
    assert measure_edit_page.get_status(
    ) == EXPECTED_STATUSES["internal_review"]

    # WHEN we send page to department review
    measure_edit_page.click_department_review()

    # THEN the status should be department review
    driver.implicitly_wait(2)
    assert measure_edit_page.is_current()
    assert measure_edit_page.get_status(
    ) == EXPECTED_STATUSES["department_review"]

    # AND the approve button should not be on page
    assert measure_edit_page.approved_is_visible() is False

    # GIVEN the department link
    review_link = measure_edit_page.get_review_link()

    # WHEN we log out and go to the review link
    measure_edit_page.log_out()
    driver.get(review_link)

    # THEN the preview page ought to have content
    assert page.title in driver.page_source

    # GIVEN the admin user
    driver_login(driver, live_server, admin_user)

    # WHEN we go to the edit page
    navigate_to_edit_page(
        driver,
        live_server,
        approved_measure_version.measure.subtopic.topic,
        approved_measure_version.measure.subtopic,
        page,
    )

    # THEN the approve button is visible
    assert measure_edit_page.approved_is_visible() is True

    # WHEN the admin user clicks approve
    measure_edit_page.click_approved()

    # THEN the status should be published
    assert measure_edit_page.get_status() == EXPECTED_STATUSES["published"]

    # WHEN we create a minor update
    measure_edit_page.click_update()
    measure_create_version_page = MeasureCreateVersionPage(driver)
    measure_create_version_page.click_minor_update()
    measure_create_version_page.click_create()

    # THEN we are on the 1.1 measure version edit page
    assert driver.current_url.endswith("/1.1/edit")

    # WHEN we try to submit the minor update immediately
    measure_edit_page.click_save_and_send_to_review()

    # THEN we get validation errors (corrections radio+edit summary)
    assert "There is a problem" in driver.page_source

    # WHEN we fill in the required data
    measure_edit_page.fill_measure_page_minor_edit_fields(
        sample_measure_version)

    # THEN we can publish the new version.
    measure_edit_page.click_save_and_send_to_review()
    measure_edit_page.click_department_review()
    measure_edit_page.click_approved()

    # THEN the status should be published
    assert measure_edit_page.get_status() == EXPECTED_STATUSES["published"]

    # WHEN we create a major update
    measure_edit_page.click_update()
    measure_create_version_page = MeasureCreateVersionPage(driver)
    measure_create_version_page.click_major_update()
    measure_create_version_page.click_create()

    # THEN we are on the 2.0 measure version edit page
    assert driver.current_url.endswith("/2.0/edit")

    # WHEN we try to submit the major update immediately
    measure_edit_page.click_save_and_send_to_review()

    # THEN we get validation errors (edit summary)
    assert "There is a problem" in driver.page_source

    # WHEN we add an upload file
    measure_edit_page.click_add_source_data()
    add_source_data_page = AddSourceDataPage(driver)
    add_source_data_page.fill_source_data_page(
        sample_measure_version.uploads[0])
    add_source_data_page.click_save()

    # AND provide an edit summary
    measure_edit_page.fill_measure_page_major_edit_fields(
        sample_measure_version)
    measure_edit_page.click_save()

    # AND add a new primary data source
    add_primary_data_source_to_measure(driver, sample_data_source)

    # AND approve the major edit
    measure_edit_page.click_save_and_send_to_review()
    measure_edit_page.click_department_review()
    measure_edit_page.click_approved()

    # THEN the status should be published
    assert measure_edit_page.get_status() == EXPECTED_STATUSES["published"]

    measure_edit_page.log_out()