Ejemplo n.º 1
0
def test_featured_product():
    """Verify that there will be only one product marked as feature."""
    program_page = ProgramPageFactory.create(featured=True)
    another_program_page = ProgramPageFactory.create(featured=True)

    program_page.refresh_from_db()
    assert not program_page.featured
    assert another_program_page.featured

    # add and mark course as featured
    course_page = CoursePageFactory.create(featured=True)
    another_program_page.refresh_from_db()
    assert not another_program_page.featured
    assert course_page.featured

    another_course_page = CoursePageFactory.create(featured=True)
    course_page.refresh_from_db()
    assert not course_page.featured
    assert another_course_page.featured

    external_course_page = ExternalCoursePageFactory.create(featured=True)
    another_course_page.refresh_from_db()
    assert not another_course_page.featured
    assert external_course_page.featured

    external_program_page = ExternalProgramPageFactory.create(featured=True)
    external_course_page.refresh_from_db()
    assert not external_course_page.featured
    assert external_program_page.featured
Ejemplo n.º 2
0
def test_custom_detail_page_urls_handled():
    """Verify that custom URL paths for our course/program are served by the standard Wagtail view"""
    readable_id = "some:readable-id"
    CoursePageFactory.create(course__readable_id=readable_id)
    resolver_match = resolve("/courses/{}/".format(readable_id))
    assert (resolver_match.func.__module__ == "wagtail.core.views")  # pylint: disable=protected-access
    assert resolver_match.func.__name__ == "serve"  # pylint: disable=protected-access
Ejemplo n.º 3
0
def test_certificate_for_course_page():
    """
    The Certificate property should return expected values if associated with a CertificatePage
    """
    course_page = CoursePageFactory.create(certificate_page=None)
    assert CertificatePage.can_create_at(course_page)
    assert not SignatoryPage.can_create_at(course_page)

    certificate_page = CertificatePageFactory.create(
        parent=course_page,
        product_name="product_name",
        CEUs="1.8",
        signatories__0__signatory__name="Name",
        signatories__0__signatory__title_1="Title_1",
        signatories__0__signatory__title_2="Title_2",
        signatories__0__signatory__organization="Organization",
        signatories__0__signatory__signature_image__title="Image",
    )
    assert certificate_page.get_parent() == course_page
    assert certificate_page.CEUs == "1.8"
    assert certificate_page.product_name == "product_name"
    for signatory in certificate_page.signatories:  # pylint: disable=not-an-iterable
        assert signatory.value.name == "Name"
        assert signatory.value.title_1 == "Title_1"
        assert signatory.value.title_2 == "Title_2"
        assert signatory.value.organization == "Organization"
        assert signatory.value.signature_image.title == "Image"
Ejemplo n.º 4
0
def test_course_page_learning_outcomes():
    """
    CoursePage related LearningOutcomesPage should return expected values if it exists
    """
    course_page = CoursePageFactory.create()

    assert course_page.outcomes is None
    assert LearningOutcomesPage.can_create_at(course_page)

    learning_outcomes_page = LearningOutcomesPageFactory(
        parent=course_page,
        heading="heading",
        sub_heading="<p>subheading</p>",
        outcome_items=json.dumps([{
            "type": "outcome",
            "value": "benefit"
        }]),
    )
    assert learning_outcomes_page.get_parent() == course_page
    assert learning_outcomes_page.heading == "heading"
    assert learning_outcomes_page.sub_heading == "<p>subheading</p>"
    for (block) in learning_outcomes_page.outcome_items:  # pylint: disable=not-an-iterable
        assert block.block_type == "outcome"
        assert block.value == "benefit"
    assert course_page.outcomes == learning_outcomes_page
    assert not LearningOutcomesPage.can_create_at(course_page)
Ejemplo n.º 5
0
def test_is_course_page():
    """Returns True if object is type of CoursePage"""
    program_page = ProgramPageFactory.create()
    course_page = CoursePageFactory.create()

    assert not program_page.is_course_page
    assert course_page.is_course_page
Ejemplo n.º 6
0
def test_custom_detail_page_urls():
    """Verify that course/external-course/program detail pages return our custom URL path"""
    readable_id = "some:readable-id"
    external_readable_id = "some:external-readable-id"
    program_pages = ProgramPageFactory.create_batch(
        2,
        program__readable_id=factory.Iterator([readable_id,
                                               "non-matching-id"]))
    external_program_pages = ExternalProgramPageFactory.create_batch(
        2,
        readable_id=factory.Iterator([readable_id,
                                      "non-matching-external-id"]))
    course_pages = CoursePageFactory.create_batch(
        2,
        course__readable_id=factory.Iterator([readable_id, "non-matching-id"]))
    external_course_pages = ExternalCoursePageFactory.create_batch(
        2,
        readable_id=factory.Iterator(
            [external_readable_id, "non-matching-external-id"]),
    )
    assert program_pages[0].get_url() == "/programs/{}/".format(readable_id)
    assert external_program_pages[0].get_url() == "/programs/{}/".format(
        readable_id)
    assert course_pages[0].get_url() == "/courses/{}/".format(readable_id)
    assert external_course_pages[0].get_url() == "/courses/{}/".format(
        external_readable_id)
Ejemplo n.º 7
0
def test_course_page():
    """
    page property should return an associated Wagtail page if one exists
    """
    course = CourseFactory.create(page=None)
    assert course.page is None
    page = CoursePageFactory.create(course=course)
    assert course.page == page
Ejemplo n.º 8
0
def test_course_page_program_page():
    """
    Verify `program_page` property from the course page returns expected value
    """
    program_page = ProgramPageFactory.create()
    course_page = CoursePageFactory.create(
        course__program=program_page.program)
    assert course_page.program_page == program_page
Ejemplo n.º 9
0
def test_program_page_course_pages():
    """
    Verify `course_pages` property from the program page returns expected value
    """
    program_page = ProgramPageFactory.create()
    assert list(program_page.course_pages) == []
    course_page = CoursePageFactory.create(
        course__program=program_page.program)
    assert list(program_page.course_pages) == [course_page]
Ejemplo n.º 10
0
def test_course_page_faq_property():
    """ Faqs property should return list of faqs related to given CoursePage"""
    course_page = CoursePageFactory.create()
    assert FrequentlyAskedQuestionPage.can_create_at(course_page)

    faqs_page = FrequentlyAskedQuestionPageFactory.create(parent=course_page)
    faq = FrequentlyAskedQuestionFactory.create(faqs_page=faqs_page)

    assert faqs_page.get_parent() is course_page
    assert list(course_page.faqs) == [faq]
Ejemplo n.º 11
0
def test_course_page_faculty_subpage():
    """
    FacultyMembersPage should return expected values if associated with CoursePage
    """
    course_page = CoursePageFactory.create()

    assert not course_page.faculty
    FacultyMembersPageFactory.create(parent=course_page,
                                     members=json.dumps(
                                         _get_faculty_members()))
    _assert_faculty_members(course_page)
Ejemplo n.º 12
0
def test_course_certificate_invalid_view(user_client, user, wagtail_basics):
    """
    Test that certificate page returns a 404 if CertificatePage does not exist for that course
    """
    home = HomePageFactory.create(parent=wagtail_basics.root, slug="home")
    home.save_revision().publish()

    course_page = CoursePageFactory.create(parent=home, certificate_page=None)
    course_page.save_revision().publish()

    course_run_certificate = CourseRunCertificateFactory.create(
        user=user, course_run__course=course_page.course
    )

    resp = user_client.get(course_run_certificate.link)
    assert resp.status_code == status.HTTP_404_NOT_FOUND
Ejemplo n.º 13
0
def test_course_page_propel_career():
    """
    The propel_career property should return expected values if associated with a CoursePage
    """
    course_page = CoursePageFactory.create()
    propel_career_page = TextSectionFactory.create(
        parent=course_page,
        content="<p>content</p>",
        dark_theme=True,
        action_title="Action Title",
    )
    assert course_page.propel_career == propel_career_page
    assert propel_career_page.action_title == "Action Title"
    assert propel_career_page.action_url
    assert propel_career_page.content == "<p>content</p>"
    assert propel_career_page.dark_theme
Ejemplo n.º 14
0
def test_instructors(has_page):
    """CourseRun.instructors should list instructors from the related CMS page, or provide an empty list"""
    faculty_names = ["Teacher One", "Teacher Two"]
    course_run = CourseRunFactory.create(course__page=None)
    if has_page:
        course_page = CoursePageFactory.create(course=course_run.course)
        FacultyMembersPageFactory.create(
            parent=course_page,
            **{
                f"members__{idx}__member__name": name
                for idx, name in enumerate(faculty_names)
            },
        )

    assert course_run.instructors == ([{
        "name": name
    } for name in faculty_names] if has_page else [])
Ejemplo n.º 15
0
def test_course_page_child_page_url():
    """
    The live URL of child pages should be of the correct format:
    <site_root>/courses/<course__readable_id>/<child_page__slug>
    """
    course_page = CoursePageFactory.create(course__readable_id="course:test")
    child_page = TextSectionFactory.create(parent=course_page)

    course_page_url = course_page.get_full_url()
    child_page_url = child_page.get_full_url()

    if WAGTAIL_APPEND_SLASH:
        assert child_page_url == "{}{}/".format(course_page_url,
                                                child_page.slug)
    else:
        assert child_page_url == "{}/{}".format(course_page_url,
                                                child_page.slug)
Ejemplo n.º 16
0
def test_basket_thumbnail_courserun(basket_and_coupons, mock_context):
    """Basket thumbnail should be serialized for a courserun"""
    thumbnail_filename = "abcde.jpg"
    course_page = CoursePageFactory.create(
        thumbnail_image__file__filename=thumbnail_filename
    )
    run = CourseRunFactory.create(course=course_page.course)
    product_version = ProductVersionFactory.create(product__content_object=run)
    data = FullProductVersionSerializer(
        instance=product_version, context=mock_context
    ).data
    assert (
        data["thumbnail_url"]
        == course_page.thumbnail_image.get_rendition(
            CATALOG_COURSE_IMG_WAGTAIL_FILL
        ).url
    )
Ejemplo n.º 17
0
def test_course_page_for_teams():
    """
    The ForTeams property should return expected values if associated with a CoursePage
    """
    course_page = CoursePageFactory.create()
    assert ForTeamsPage.can_create_at(course_page)
    teams_page = ForTeamsPageFactory.create(
        parent=course_page,
        content="<p>content</p>",
        switch_layout=True,
        dark_theme=True,
        action_title="Action Title",
    )
    assert course_page.for_teams == teams_page
    assert teams_page.action_title == "Action Title"
    assert teams_page.content == "<p>content</p>"
    assert teams_page.switch_layout
    assert teams_page.dark_theme
Ejemplo n.º 18
0
def test_program_course_order():
    """
    The course pages in program page should be ordered on the basis of position_in_program
    """
    program_page = ProgramPageFactory.create()
    course_pages = CoursePageFactory.create_batch(
        3,
        course__position_in_program=factory.Iterator([2, 3, 1]),
        course__program=program_page.program,
    )
    single_course_page = course_pages[0]
    assert [
        course_page.course.position_in_program
        for course_page in single_course_page.course_pages
    ] == [1, 2, 3]
    assert [
        course_page.course.position_in_program
        for course_page in program_page.course_pages
    ] == [1, 2, 3]
Ejemplo n.º 19
0
def test_course_page_learning_techniques():
    """
    CoursePage related subpages should return expected values if they exist
    CoursePage related LearningTechniquesPage should return expected values if it exists
    """
    course_page = CoursePageFactory.create()

    assert LearningTechniquesPage.can_create_at(course_page)
    learning_techniques_page = LearningTechniquesPageFactory(
        parent=course_page,
        technique_items__0__techniques__heading="heading",
        technique_items__0__techniques__sub_heading="sub_heading",
        technique_items__0__techniques__image__title="image-title",
    )
    assert learning_techniques_page.get_parent() == course_page
    for (technique) in learning_techniques_page.technique_items:  # pylint: disable=not-an-iterable
        assert technique.value.get("heading") == "heading"
        assert technique.value.get("sub_heading") == "sub_heading"
        assert technique.value.get("image").title == "image-title"
Ejemplo n.º 20
0
def test_course_certificate_view(user_client, user, wagtail_basics):
    """
    Test that certificate page show correctly
    """
    home = HomePageFactory.create(parent=wagtail_basics.root, slug="home")
    home.save_revision().publish()

    course_page = CoursePageFactory.create(parent=home)
    course_page.save_revision().publish()

    course_run = CourseRunFactory.create(course=course_page.course)

    course_run_certificate = CourseRunCertificateFactory.create(
        user=user, course_run=course_run
    )

    resp = user_client.get(course_run_certificate.link)
    assert resp.status_code == status.HTTP_200_OK
    assert resp.context_data["page"] == course_page.certificate_page
    assert resp.context_data["page"].certificate == course_run_certificate
Ejemplo n.º 21
0
def test_course_page_properties():
    """
    Wagtail-page-related properties should return expected values
    """
    course_page = CoursePageFactory.create(
        title="<p>page title</p>",
        subhead="subhead",
        description="<p>desc</p>",
        catalog_details="<p>catalog desc</p>",
        duration="1 week",
        video_title="<p>title</p>",
        video_url="http://test.com/mock.mp4",
        background_image__title="background-image",
    )
    assert course_page.title == "<p>page title</p>"
    assert course_page.subhead == "subhead"
    assert course_page.description == "<p>desc</p>"
    assert course_page.catalog_details == "<p>catalog desc</p>"
    assert course_page.duration == "1 week"
    assert course_page.video_title == "<p>title</p>"
    assert course_page.video_url == "http://test.com/mock.mp4"
    assert course_page.background_image.title == "background-image"
Ejemplo n.º 22
0
def test_course_certificate_view_revoked_state(user_client, user, wagtail_basics):
    """
    Test that certificate page return 404 for revoked certificate.
    """
    home = HomePageFactory.create(parent=wagtail_basics.root, slug="home")
    home.save_revision().publish()

    course_page = CoursePageFactory.create(parent=home)
    course_page.save_revision().publish()

    course_run = CourseRunFactory.create(course=course_page.course)

    course_run_certificate = CourseRunCertificateFactory.create(
        user=user, course_run=course_run, is_revoked=False
    )

    resp = user_client.get(course_run_certificate.link)
    assert resp.status_code == status.HTTP_200_OK

    course_run_certificate.is_revoked = True
    course_run_certificate.save()
    resp = user_client.get(course_run_certificate.link)
    assert resp.status_code == status.HTTP_404_NOT_FOUND
Ejemplo n.º 23
0
def test_course_page_testimonials():
    """
    testimonials property should return expected value if associated with a CoursePage
    """
    course_page = CoursePageFactory.create()
    assert UserTestimonialsPage.can_create_at(course_page)
    testimonials_page = UserTestimonialsPageFactory.create(
        parent=course_page,
        heading="heading",
        subhead="subhead",
        items__0__testimonial__name="name",
        items__0__testimonial__title="title",
        items__0__testimonial__image__title="image",
        items__0__testimonial__quote="quote",
    )
    assert course_page.testimonials == testimonials_page
    assert testimonials_page.heading == "heading"
    assert testimonials_page.subhead == "subhead"
    for testimonial in testimonials_page.items:  # pylint: disable=not-an-iterable
        assert testimonial.value.get("name") == "name"
        assert testimonial.value.get("title") == "title"
        assert testimonial.value.get("image").title == "image"
        assert testimonial.value.get("quote") == "quote"