Exemple #1
0
    def test_cancel_after_paid(
        self,
        order_email_service_mock,
        order_paid_signal_send_mock,
        order_canceled_signal_send_mock,
    ):
        article_before = self.create_article(self.shop.id, quantity=8)

        quantified_articles_to_order = {(article_before, 3)}
        placed_order = self.place_order(quantified_articles_to_order)
        order_before = get_order(placed_order.id)

        assert article_before.quantity == 5

        assert_payment_is_open(order_before)

        url = f'/admin/shop/orders/{order_before.id}/mark_as_paid'
        form_data = {'payment_method': 'bank_transfer'}
        with http_client(self.app, user_id=self.admin.id) as client:
            response = client.post(url, data=form_data)

        url = f'/admin/shop/orders/{order_before.id}/cancel'
        form_data = {
            'reason': 'Dein Vorname ist albern!',
            'send_email': 'n',
        }
        with http_client(self.app, user_id=self.admin.id) as client:
            response = client.post(url, data=form_data)

        order_afterwards = get_order(order_before.id)
        assert response.status_code == 302
        assert_payment(
            order_afterwards,
            PaymentMethod.bank_transfer,
            PaymentState.canceled_after_paid,
            self.admin.id,
        )

        article_afterwards = Article.query.get(article_before.id)
        assert article_afterwards.quantity == 8

        order_email_service_mock.send_email_for_canceled_order_to_orderer.assert_called_once_with(
            placed_order.id)

        event = ShopOrderCanceled(
            occurred_at=order_afterwards.payment_state_updated_at,
            order_id=placed_order.id,
            initiator_id=self.admin.id,
        )
        order_canceled_signal_send_mock.assert_called_once_with(None,
                                                                event=event)
Exemple #2
0
    def test_mark_order_as_paid(self, order_email_service_mock,
                                order_paid_signal_send_mock):
        placed_order = self.place_order([])
        order_before = get_order(placed_order.id)

        assert_payment_is_open(order_before)

        url = f'/admin/shop/orders/{order_before.id}/mark_as_paid'
        form_data = {'payment_method': 'direct_debit'}
        with http_client(self.app, user_id=self.admin.id) as client:
            response = client.post(url, data=form_data)

        order_afterwards = get_order(order_before.id)
        assert response.status_code == 302
        assert_payment(
            order_afterwards,
            PaymentMethod.direct_debit,
            PaymentState.paid,
            self.admin.id,
        )

        order_email_service_mock.send_email_for_paid_order_to_orderer.assert_called_once_with(
            placed_order.id)

        event = ShopOrderPaid(
            occurred_at=order_afterwards.payment_state_updated_at,
            order_id=placed_order.id,
        )
        order_paid_signal_send_mock.assert_called_once_with(None, event=event)
Exemple #3
0
    def test_homepage(self):
        with http_client(self.app) as client:
            response = client.get('/')

        # By default, nothing is mounted on `/`, but at least check that
        # the application boots up and doesn't return a server error.
        assert response.status_code == 404
Exemple #4
0
    def test_cancel_before_paid(self, order_email_service_mock,
                                order_canceled_signal_send_mock):
        article_before = self.create_article(self.shop.id, quantity=8)

        quantified_articles_to_order = {(article_before, 3)}
        placed_order = self.place_order(quantified_articles_to_order)
        order_before = get_order(placed_order.id)

        assert article_before.quantity == 5

        assert_payment_is_open(order_before)

        url = '/admin/shop/orders/{}/cancel'.format(order_before.id)
        form_data = {
            'reason': 'Dein Vorname ist albern!',
            'send_email': 'y',
        }
        with http_client(self.app, user_id=self.admin.id) as client:
            response = client.post(url, data=form_data)

        order_afterwards = get_order(order_before.id)
        assert response.status_code == 302
        assert_payment(order_afterwards, PaymentMethod.bank_transfer,
                       PaymentState.canceled_before_paid, self.admin.id)

        article_afterwards = Article.query.get(article_before.id)
        assert article_afterwards.quantity == 8

        order_email_service_mock.send_email_for_canceled_order_to_orderer \
            .assert_called_once_with(placed_order.id)

        order_canceled_signal_send_mock \
            .assert_called_once_with(None, order_id=placed_order.id)
Exemple #5
0
    def test_cancel_before_paid_without_sending_email(
            self, order_email_service_mock, order_canceled_signal_send_mock):
        article_before = self.create_article(self.shop.id, quantity=8)
        quantified_articles_to_order = {(article_before, 3)}
        placed_order = self.place_order(quantified_articles_to_order)

        url = f'/admin/shop/orders/{placed_order.id}/cancel'
        form_data = {
            'reason': 'Dein Vorname ist albern!',
            # Sending e-mail is not requested.
        }
        with http_client(self.app, user_id=self.admin.id) as client:
            response = client.post(url, data=form_data)

        order_afterwards = get_order(placed_order.id)
        assert response.status_code == 302

        # No e-mail should be send.
        order_email_service_mock.send_email_for_canceled_order_to_orderer.assert_not_called(
        )

        event = ShopOrderCanceled(
            occurred_at=order_afterwards.payment_state_updated_at,
            order_id=placed_order.id,
            initiator_id=self.admin.id,
        )
        order_canceled_signal_send_mock.assert_called_once_with(None,
                                                                event=event)
Exemple #6
0
    def test_order(self, order_email_service_mock, order_placed_mock):
        article_before = self.get_article()
        assert article_before.quantity == 5

        url = '/shop/order'
        article_quantity_key = f'article_{self.article_id}'
        form_data = {
            'first_names': 'Hiro',
            'last_name': 'Protagonist',
            'country': 'State of Mind',
            'zip_code': '31337',
            'city': 'Atrocity',
            'street': 'L33t Street 101',
            article_quantity_key: 3,
        }
        with http_client(self.app, user_id=self.orderer.id) as client:
            response = client.post(url, data=form_data)

        article_afterwards = self.get_article()
        assert article_afterwards.quantity == 2

        order = Order.query.filter_by(placed_by=self.orderer).one()
        assert_order(order, 'AEC-01-B00005', 1)

        first_order_item = order.items[0]
        assert_order_item(
            first_order_item,
            self.article_id,
            article_before.price,
            article_before.tax_rate,
            3,
        )

        order_email_service_mock.send_email_for_incoming_order_to_orderer.assert_called_once_with(
            order.id)

        event = ShopOrderPlaced(occurred_at=order.created_at,
                                order_id=order.id)
        order_placed_mock.assert_called_once_with(None, event=event)

        order_detail_page_url = f'http://example.com/shop/orders/{order.id}'

        assert_response_headers(response, order_detail_page_url)

        with http_client(self.app, user_id=self.orderer.id) as client:
            assert_order_detail_page_works(client, order_detail_page_url,
                                           order.order_number)
Exemple #7
0
    def test_view_profile(self):
        url = f'/users/{self.user.id}'

        with http_client(self.app) as client:
            response = client.get(url)

        assert response.status_code == 200
        assert response.mimetype == 'text/html'
Exemple #8
0
    def request_view(self, current_user, order_id):
        login_user(current_user.id)

        url = '/shop/orders/{}'.format(str(order_id))

        with http_client(self.app, user_id=current_user.id) as client:
            response = client.get(url)

        return response
Exemple #9
0
    def send_request(self, recipient_id, text, *, current_user_id=None):
        url = '/user_messages/to/{}/create'.format(recipient_id)

        form_data = {
            'body': text,
        }

        if current_user_id is not None:
            login_user(current_user_id)

        with http_client(self.app, user_id=current_user_id) as client:
            return client.post(url, data=form_data)
Exemple #10
0
    def test_pin_topic(self):
        topic_before = create_topic(self.category_id, self.user.id, 1)

        assert_topic_is_not_pinned(topic_before)

        url = '/board/topics/{}/flags/pinned'.format(topic_before.id)
        with http_client(self.app, user_id=self.admin.id) as client:
            response = client.post(url)

        assert response.status_code == 204
        topic_afterwards = find_topic(topic_before.id)
        assert_topic_is_pinned(topic_afterwards, self.admin.id)
Exemple #11
0
    def test_order_single(self, order_email_service_mock, order_placed_mock):
        article_before = self.get_article()
        assert article_before.quantity == 5

        url = '/shop/order_single/{}'.format(str(self.article_id))
        form_data = {
            'first_names': 'Hiro',
            'last_name': 'Protagonist',
            'country': 'State of Mind',
            'zip_code': '31337',
            'city': 'Atrocity',
            'street': 'L33t Street 101',
            'quantity': 1,  # TODO: Test with `3` if limitation is removed.
        }
        with http_client(self.app, user_id=self.orderer.id) as client:
            response = client.post(url, data=form_data)

        article_afterwards = self.get_article()
        assert article_afterwards.quantity == 4

        order = Order.query.filter_by(placed_by=self.orderer).one()
        assert_order(order, 'AEC-01-B00005', 1)

        first_order_item = order.items[0]
        assert_order_item(first_order_item, self.article_id,
                          article_before.price, article_before.tax_rate, 1)

        order_email_service_mock.send_email_for_incoming_order_to_orderer \
            .assert_called_once_with(order.id)

        order_placed_mock.assert_called_once_with(None, order_id=order.id)

        order_detail_page_url = 'http://example.com/shop/orders/{}' \
            .format(order.id)

        assert_response_headers(response, order_detail_page_url)

        with http_client(self.app, user_id=self.orderer.id) as client:
            assert_order_detail_page_works(client, order_detail_page_url,
                                           order.order_number)
Exemple #12
0
    def request_comment_creation(self, match_id, *, user_id=None):
        url = '/api/tourney/matches/{}/comments'.format(match_id)

        headers = [
            assemble_authorization_header('just-say-PLEASE'),
        ]

        form_data = {
            'body': 'gg',
        }

        with http_client(self.app, user_id=user_id) as client:
            return client.post(url, headers=headers, data=form_data)
    def test_hide_topic(self):
        topic_before = create_topic(self.category_id, self.user.id, 1)
        self.db.session.commit()

        assert_topic_is_not_hidden(topic_before)

        url = '/board/topics/{}/flags/hidden'.format(topic_before.id)
        with http_client(self.app, user_id=self.admin.id) as client:
            response = client.post(url)

        assert response.status_code == 204
        topic_afterwards = find_topic(topic_before.id)
        assert_topic_is_hidden(topic_afterwards, self.admin.id)
    def test_unhide_topic(self):
        topic_before = create_topic(self.category_id, self.user.id, 1)
        board_topic_command_service.hide_topic(topic_before, self.admin.id)

        assert_topic_is_hidden(topic_before, self.admin.id)

        url = '/board/topics/{}/flags/hidden'.format(topic_before.id)
        with http_client(self.app, user_id=self.admin.id) as client:
            response = client.delete(url)

        assert response.status_code == 204
        topic_afterwards = find_topic(topic_before.id)
        assert_topic_is_not_hidden(topic_afterwards)
Exemple #15
0
    def test_move_topic(self):
        topic_before = create_topic(self.category_id_1, self.user.id, 1)

        assert topic_before.category.id == self.category_id_1

        url = '/board/topics/{}/move'.format(topic_before.id)
        form_data = {'category_id': self.category_id_2}
        with http_client(self.app, user_id=self.admin.id) as client:
            response = client.post(url, data=form_data)

        assert response.status_code == 302
        topic_afterwards = find_topic(topic_before.id)
        assert topic_afterwards.category.id == self.category_id_2
Exemple #16
0
    def test_serialize_order(self):
        filename = 'testfixtures/shop/order_export.xml'
        with codecs.open(filename, encoding='iso-8859-1') as f:
            expected = f.read().rstrip()

        url = f'/admin/shop/orders/{self.order.id}/export'
        with http_client(self.app, user_id=self.admin.id) as client:
            response = client.get(url)

        assert response.status_code == 200
        assert response.content_type == 'application/xml; charset=iso-8859-1'

        body = response.get_data().decode('utf-8')
        assert body == expected
Exemple #17
0
    def test_cancel_before_paid_without_sending_email(self,
            order_email_service_mock, order_canceled_signal_send_mock):
        article_before = self.create_article(self.shop.id, quantity=8)
        quantified_articles_to_order = {(article_before, 3)}
        placed_order = self.place_order(quantified_articles_to_order)

        url = '/admin/shop/orders/{}/cancel'.format(placed_order.id)
        form_data = {
            'reason': 'Dein Vorname ist albern!',
            # Sending e-mail is not requested.
        }
        with http_client(self.app, user_id=self.admin.id) as client:
            response = client.post(url, data=form_data)

        assert response.status_code == 302

        # No e-mail should be send.
        order_email_service_mock.send_email_for_canceled_order_to_orderer \
            .assert_not_called()

        order_canceled_signal_send_mock \
            .assert_called_once_with(None, order_id=placed_order.id)
Exemple #18
0
    def send_request(self, form_data):
        url = '/users/'

        with http_client(self.app) as client:
            return client.post(url, data=form_data)
Exemple #19
0
 def get_as_admin(self, url):
     """Make a GET request as the admin and return the response."""
     with http_client(self.app, user_id=self.admin.id) as client:
         return client.get(url)
Exemple #20
0
def client(app, newsletter_admin):
    """Provide a test HTTP client against the API."""
    with http_client(app, user_id=newsletter_admin.id) as client:
        yield client
 def send_request(self, *, user_id=None):
     url = '/authentication/password/update'
     with http_client(self.app, user_id=user_id) as client:
         return client.get(url)
Exemple #22
0
 def _confirm(self, verification_token):
     url = '/users/email_address/confirmation/{}' \
         .format(verification_token.token)
     with http_client(self.app) as client:
         return client.get(url)
Exemple #23
0
 def send_request(self, form_data, *, user_id=None):
     url = '/authentication/password'
     with http_client(self.app, user_id=user_id) as client:
         return client.post(url, data=form_data)
Exemple #24
0
 def send_request(self, *, user_id=None):
     url = '/users/me'
     with http_client(self.app, user_id=user_id) as client:
         return client.get(url)
Exemple #25
0
 def send_request(self, user_id):
     url = '/users/{}.json'.format(user_id)
     with http_client(self.app) as client:
         return client.get(url)