| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | import datetime
import pytest
from django.utils import timezone
from oscar.apps.dashboard.reviews import views
from oscar.core.loading import get_model
from oscar.test.factories.catalogue import ProductReviewFactory
from oscar.test.factories.customer import UserFactory
now = timezone.now()
ProductReview = get_model('reviews', 'ProductReview')
keywords = [
    'aaaaa',
    'bbbbb',
    'ccccc',
    'ddddd'
]
@pytest.fixture
def reviews():
    for i in range(10):
        keyword = keywords[i % len(keywords)]
        date_created = now - datetime.timedelta(days=i)
        user = UserFactory(
            first_name=keyword
        )
        review = ProductReviewFactory(
            score=i % 5,
            title='review title product %d %s' % (i, keyword),
            body='review body product %d %s' % (i, keyword),
            status=i % 3,
            user=user,
        )
        review.date_created = date_created
        review.save()
    return ProductReview.objects.all()
@pytest.fixture
def reviewlistview(rf, reviews):
    view = views.ReviewListView()
    view.request = rf.get('/')
    return view
@pytest.mark.django_db
class TestReviewListView(object):
    def test_get(self, rf):
        request = rf.get('/')
        view = views.ReviewListView.as_view()
        response = view(request)
        assert response.status_code == 200
        request = rf.get('/', data=dict(keyword='test', status='', date_from='', date_to='', name=''))
        response = view(request)
        assert response.status_code == 200
        request = rf.get('/', data=dict(keyword='', status='0', date_from='', date_to='', name=''))
        response = view(request)
        assert response.status_code == 200
        request = rf.get('/', data=dict(
            keyword='test', status='', date_from='2017-01-01', date_to='', name=''))
        response = view(request)
        assert response.status_code == 200
        request = rf.get('/', data=dict(
            keyword='test', status='', date_from='', date_to='2017-01-01', name=''))
        response = view(request)
        assert response.status_code == 200
        request = rf.get('/', data=dict(
            keyword='test', status='', date_from='2017-01-01', date_to='2017-12-31', name=''))
        response = view(request)
        assert response.status_code == 200
        request = rf.get('/', data=dict(
            keyword='', status='', date_from='', date_to='', name='test'))
        response = view(request)
        assert response.status_code == 200
    def test_add_filter_status(self, rf, reviews):
        request = rf.get('/', data=dict(status=ProductReview.FOR_MODERATION))
        view = views.ReviewListView.as_view()
        response = view(request)
        view = response.context_data['view']
        qs = view.get_queryset()
        assert qs.count() == 4
        request = rf.get('/', data=dict(status=ProductReview.APPROVED))
        view = views.ReviewListView.as_view()
        response = view(request)
        view = response.context_data['view']
        qs = view.get_queryset()
        assert qs.count() == 3
        request = rf.get('/', data=dict(status=ProductReview.REJECTED))
        view = views.ReviewListView.as_view()
        response = view(request)
        view = response.context_data['view']
        qs = view.get_queryset()
        assert qs.count() == 3
    def test_add_filter_keyword(self, rf, reviews):
        expect = {
            'aaaaa': 3,
            'bbbbb': 3,
            'ccccc': 2,
            'ddddd': 2,
        }
        for keyword in expect:
            request = rf.get('/', data=dict(keyword=keyword))
            view = views.ReviewListView.as_view()
            response = view(request)
            view = response.context_data['view']
            qs = view.get_queryset()
            assert qs.count() == expect[keyword]
            assert 'with keyword matching' in view.desc_ctx['kw_filter']
            assert keyword in view.desc_ctx['kw_filter']
    def test_add_filter_name(self, rf, reviews):
        expect = {
            'aaaaa': 3,
            'bbbbb': 3,
            'ccccc': 2,
            'ddddd': 2,
        }
        for keyword in expect:
            name = '%s winterbottom' % keyword
            request = rf.get('/', data=dict(name=name))
            view = views.ReviewListView.as_view()
            response = view(request)
            view = response.context_data['view']
            qs = view.get_queryset()
            assert qs.count() == expect[keyword]
            assert 'with customer name matching' in view.desc_ctx['name_filter']
            assert keyword in view.desc_ctx['name_filter']
    def test_get_date_from_to_queryset(self, reviewlistview):
        view = reviewlistview
        date_from = now - datetime.timedelta(days=6)
        date_to = now - datetime.timedelta(days=2)
        qs = view.get_queryset()
        assert qs.count() == 10
        qs = view.get_date_from_to_queryset(None, None)
        assert qs.count() == 10
        assert view.desc_ctx['date_filter'] == ''
        qs = view.get_date_from_to_queryset(date_from, None, qs)
        assert qs.count() == 7
        assert view.desc_ctx['date_filter'].startswith(' created after')
        qs = view.get_date_from_to_queryset(None, date_to, qs)
        assert qs.count() == 5
        assert view.desc_ctx['date_filter'].startswith(' created before')
        qs = view.get_date_from_to_queryset(date_from, date_to, qs)
        assert qs.count() == 5
        assert view.desc_ctx['date_filter'].startswith(' created between')
 |