コード例 #1
0
def test_create_segment_with_new_referral_rule():
    segment = SegmentFactory()

    segment.referral_rule = ReferralRuleFactory(regex_string='test.notest',
                                                segment=segment)

    assert segment.referral_rule.regex_string == 'test.notest'
コード例 #2
0
def test_get_segment_by_id(rf):
    request = rf.get('/')

    adapter = adapters.SessionSegmentsAdapter(request)

    segment_1 = SegmentFactory(name='segment-1', persistent=True)
    segment_2 = SegmentFactory(name='segment-2', persistent=True)

    adapter.set_segments([segment_1, segment_2])

    segment_x = adapter.get_segment_by_id(segment_2.pk)
    assert segment_x == segment_2
コード例 #3
0
    def test_multiple_segments_exist(self, client):
        first_segment = SegmentFactory(name='First')
        second_segment = SegmentFactory(name='Second')

        TimeRuleFactory(start_time=datetime.time(8, 0, 0),
                        end_time=datetime.time(23, 0, 0),
                        segment=first_segment)
        ReferralRuleFactory(regex_string="test.test", segment=first_segment)

        TimeRuleFactory(start_time=datetime.time(8, 0, 0),
                        end_time=datetime.time(23, 0, 0),
                        segment=second_segment)
コード例 #4
0
def test_get_segments(rf):
    request = rf.get('/')

    adapter = adapters.SessionSegmentsAdapter(request)

    segment_1 = SegmentFactory(name='segment-1', persistent=True)
    segment_2 = SegmentFactory(name='segment-2', persistent=True)

    adapter.set_segments([segment_1, segment_2])
    assert len(request.session['segments']) == 2

    segments = adapter.get_segments()
    assert segments == [segment_1, segment_2]
コード例 #5
0
def test_update_visit_count_deleted_segment(rf, site):
    request = rf.get('/')

    adapter = adapters.SessionSegmentsAdapter(request)

    segment_1 = SegmentFactory(name='segment-1',
                               persistent=True,
                               visit_count=0)
    segment_2 = SegmentFactory(name='segment-2',
                               persistent=True,
                               visit_count=0)

    adapter.set_segments([segment_1, segment_2])
    segment_2.delete()
    adapter.update_visit_count()
コード例 #6
0
def test_day_rule_create():
    segment = SegmentFactory(name='DaySegment')
    day_rule = DayRuleFactory(mon=True, thu=True, segment=segment)

    assert day_rule.mon is True
    assert day_rule.thu is True
    assert day_rule.sun is False
コード例 #7
0
def test_device_rule_create():
    segment = SegmentFactory(name='DeviceSegment')
    device_rule = DeviceRuleFactory(mobile=True, segment=segment)

    assert device_rule.mobile is True
    assert device_rule.tablet is False
    assert device_rule.desktop is False
コード例 #8
0
    def test_referral_segment(self, client):
        referral_segment = SegmentFactory(name='Referral')
        ReferralRuleFactory(regex_string="test.test", segment=referral_segment)

        client.get('/', **{'HTTP_REFERER': 'test.test'})

        assert client.session['segments'][0]['encoded_name'] == 'referral'
コード例 #9
0
def test_page_listing_more_buttons(site, rf, segmented_page):
    page = segmented_page.personalisation_metadata.canonical_page

    SegmentFactory(name='something')
    result = wagtail_hooks.page_listing_more_buttons(page, [])
    items = list(result)
    assert len(items) == 3
コード例 #10
0
    def test_day_segment(self, client):
        day_only_segment = SegmentFactory(name='Day only')
        DayRuleFactory(sun=True, segment=day_only_segment)

        client.get('/')

        assert client.session['segments'][0]['encoded_name'] == 'day-only'
コード例 #11
0
def test_session_not_added_to_static_segment_after_full(
        site, client, django_user_model):
    user = django_user_model.objects.create(username='******')
    other_user = django_user_model.objects.create(username='******')
    segment = SegmentFactory.build(type=Segment.TYPE_STATIC, count=1)
    rule = VisitCountRule(counted_page=site.root_page)
    form = form_with_data(segment, rule)
    instance = form.save()

    assert not instance.static_users.all()

    session = client.session
    client.force_login(user)
    client.get(site.root_page.url)

    assert instance.static_users.count() == 1

    client.cookies.clear()
    second_session = client.session
    client.force_login(other_user)
    client.get(site.root_page.url)

    assert session.session_key != second_session.session_key
    assert instance.static_users.count() == 1
    assert user in instance.static_users.all()
    assert other_user not in instance.static_users.all()
コード例 #12
0
def test_segment_edit_view(site, client, django_user_model):
    test_segment = SegmentFactory()
    try:
        new_panel = test_segment.panels[1].children[0].bind_to(model=Segment)
    except AttributeError:
        new_panel = test_segment.panels[1].children[0].bind_to_model(Segment)
    assert new_panel.related.name == "wagtail_personalisation_timerules"
コード例 #13
0
def test_segment_template_block(rf, site):
    SegmentFactory(name='test', persistent=True)

    request = rf.get('/')

    request.session['segments'] = [{
        "encoded_name": 'test',
        "id": 1,
        "timestamp": int(time.time()),
        "persistent": True
    }]

    content = render_template("""
        {% load wagtail_personalisation_tags %}
        {% segment name='test' %}Test{% endsegment %}
    """,
                              request=request).strip()

    assert content == "Test"

    content = render_template("""
        {% load wagtail_personalisation_tags %}
        {% segment name='test2' %}Test{% endsegment %}
    """,
                              request=request).strip()

    assert content == ""

    with pytest.raises(TemplateSyntaxError):
        content = render_template("""
            {% load wagtail_personalisation_tags %}
            {% segment wrongname='test2' %}Test{% endsegment %}
        """,
                                  request=request).strip()
コード例 #14
0
def test_referral_rule_create():
    segment = SegmentFactory(name='Referral')
    referral_rule = ReferralRuleFactory(
        regex_string='test.test',
        segment=segment)

    assert referral_rule.regex_string == 'test.test'
コード例 #15
0
def test_create_segment_with_time_rule():
    segment = SegmentFactory(name='TimeSegment')
    time_rule = TimeRuleFactory(start_time=datetime.time(8, 0, 0),
                                end_time=datetime.time(23, 0, 0),
                                segment=segment)

    assert time_rule.start_time == datetime.time(8, 0, 0)
コード例 #16
0
def test_test_user_calls_get_country(rf):
    segment = SegmentFactory(name='Test segment')
    rule = OriginCountryRuleFactory(segment=segment, country='GB')
    request = rf.get('/')
    with patch.object(rule, 'get_country') as get_country_mock:
        rule.test_user(request)
    get_country_mock.assert_called_once_with(request)
コード例 #17
0
    def test_visit_count_rule(self, client):
        segment = SegmentFactory(name='Visit Count')

        VisitCountRuleFactory(counted_page=self.site.root_page,
                              segment=segment)

        client.get("/root")
コード例 #18
0
    def test_only_one_query_rule(self, client):
        segment = SegmentFactory(name='Query')
        QueryRuleFactory(parameter="query", value="value", segment=segment)

        client.get('/?test=test&query=value')

        assert any(item['encoded_name'] == 'query'
                   for item in client.session['segments'])
コード例 #19
0
def test_query_rule_create():
    segment = SegmentFactory(name='Query')
    query_rule = QueryRuleFactory(parameter="query",
                                  value="value",
                                  segment=segment)

    assert query_rule.parameter == 'query'
    assert query_rule.value == 'value'
コード例 #20
0
def test_referral_segment(client, site):
    referral_segment = SegmentFactory(name='Referral')
    ReferralRuleFactory(regex_string="test.test", segment=referral_segment)

    response = client.get('/', **{'HTTP_REFERER': 'test.test'})
    assert response.status_code == 200

    assert client.session['segments'][0]['encoded_name'] == 'referral'
コード例 #21
0
def test_dynamic_segment_with_non_static_rules_have_a_count():
    segment = SegmentFactory.build(type=Segment.TYPE_DYNAMIC, count=0)
    rule = TimeRule(
        start_time=datetime.time(0, 0, 0),
        end_time=datetime.time(23, 59, 59),
    )
    form = form_with_data(segment, rule)
    assert form.is_valid(), form.errors
コード例 #22
0
def test_randomisation_percentage_max_100(site, client, mocker,
                                          django_user_model):
    segment = SegmentFactory.build(type=Segment.TYPE_STATIC)
    segment.randomisation_percent = 101
    rule = VisitCountRule()

    form = form_with_data(segment, rule)
    assert not form.is_valid()
コード例 #23
0
def test_user_added_to_static_segment_at_creation(site, user, mocker):
    segment = SegmentFactory.build(type=Segment.TYPE_STATIC)
    rule = VisitCountRule(counted_page=site.root_page)
    form = form_with_data(segment, rule)
    mocker.patch('wagtail_personalisation.rules.VisitCountRule.test_user',
                 return_value=True)
    instance = form.save()

    assert user in instance.static_users.all()
コード例 #24
0
def test_non_static_rules_have_a_count():
    segment = SegmentFactory.build(type=Segment.TYPE_STATIC, count=0)
    rule = TimeRule(
        start_time=datetime.time(0, 0, 0),
        end_time=datetime.time(23, 59, 59),
        segment=segment,
    )
    form = form_with_data(segment, rule)
    assert not form.is_valid()
コード例 #25
0
def test_create_segment_factory():
    factoried_segment = SegmentFactory()
    segment = Segment(name='TestSegment', status='enabled')
    TimeRule(start_time=datetime.time(8, 0, 0),
             end_time=datetime.time(23, 0, 0),
             segment=segment)

    assert factoried_segment.name == segment.name
    assert factoried_segment.status == segment.status
コード例 #26
0
def test_request_device_segment(client, site):
    device_only_segment = SegmentFactory(name='Device only')
    DeviceRuleFactory(
        tablet=True,
        segment=device_only_segment)

    client.get('/', **{'HTTP_USER_AGENT': 'Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X)'})

    assert client.session['segments'][0]['encoded_name'] == 'device-only'
コード例 #27
0
def test_request_device_segment_no_match(client, site):
    no_device_segment = SegmentFactory(name='No device')
    DeviceRuleFactory(
        mobile=True,
        segment=no_device_segment)

    client.get('/', **{'HTTP_USER_AGENT': 'Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X)'})

    assert not client.session['segments']
コード例 #28
0
    def test_time_segment(self, client):
        time_only_segment = SegmentFactory(name='Time only')
        TimeRuleFactory(start_time=datetime.time(8, 0, 0),
                        end_time=datetime.time(23, 0, 0),
                        segment=time_only_segment)

        client.get('/')

        assert client.session['segments'][0]['encoded_name'] == 'time-only'
コード例 #29
0
def test_randomisation_percentage_added_to_segment_at_creation(
        site, client, mocker, django_user_model):
    segment = SegmentFactory.build(type=Segment.TYPE_STATIC)
    segment.randomisation_percent = 80
    rule = VisitCountRule()

    form = form_with_data(segment, rule)
    instance = form.save()

    assert instance.randomisation_percent == 80
コード例 #30
0
    def test_no_time_but_referral_segment(self, client):
        segment = SegmentFactory(name='Not both')
        TimeRuleFactory(start_time=datetime.time(8, 0, 0),
                        end_time=datetime.time(23, 0, 0),
                        segment=segment)
        ReferralRuleFactory(regex_string="test.test", segment=segment)

        client.get('/', **{'HTTP_REFERER': 'test.test'})

        assert len(client.session['segments']) == 0