def test_an_exchange_can_be_generated_automatically(
            self, mock_token, mock_uuid):
        # Given
        mock_uuid.return_value = 'id1'
        mock_token.side_effect = ['up1', 'dl1']

        # When
        generated_exchange = Exchange.generate('sub1')

        # Then
        expected_exchange = Exchange('id1', 'sub1', 'up1', 'dl1', False,
                                     generated_exchange.creation_time)
        assert expected_exchange == generated_exchange
        assert expected_exchange.creation_time < datetime.now(timezone.utc)
    def test_an_exchange_should_be_created_with_revoked_upload_set_to_false(
            self):
        # Given
        exchange = Exchange('id1', 'sub1', 'up1', 'dl1')

        # Then
        assert exchange.revoked_upload is False
    def test_handle_should_return_a_200_status(self, revoke_an_exchange,
                                               mock_exchange_repo,
                                               revoke_event, event_sub):
        # Given
        mock_exchange_repo.get.return_value = Exchange.generate(event_sub)

        # When
        response = handle(event=revoke_event, context={})

        # Then
        assert response['body'] == 'Exchange revoked'
        assert response['statusCode'] == 200
    def test_handle_should_launch_a_revoke_command(self, revoke_an_exchange,
                                                   mock_exchange_repo,
                                                   revoke_event, event_sub):
        # Given
        mock_exchange_repo.get.return_value = Exchange.generate(event_sub)

        # When
        handle(event=revoke_event, context={})

        # Then
        revoke_an_exchange.revoke_an_exchange_by_its_identifier.assert_called_once_with(
            revoke_event['headers']['exchange_identifier'])
    def test_handle_should_return_403_if_jwt_sub_does_not_match_exchange_sub(
            self, revoke_an_exchange, mock_exchange_repo, revoke_event,
            an_exchange):
        # Given
        mock_exchange_repo.get.return_value = Exchange.generate(
            'a_different_sub')

        # When
        response = handle(event=revoke_event, context={})

        # Then
        assert response['body'] == 'Forbidden'
        assert response['statusCode'] == 403
    def test_exchanges_should_be_compared_on_identifier_email_tokens_upload_revocation_and_creation_time(
            self):
        # Given
        exchange1 = Exchange(identifier='id1',
                             sub='sub1',
                             upload_token='up1',
                             download_token='dl1',
                             revoked_upload=False,
                             creation_time=datetime.now())
        exchange1bis = Exchange('id1', 'sub1', 'up1', 'dl1', False,
                                exchange1.creation_time)
        exchange2 = Exchange('id2', 'sub2', 'up2', 'dl2', False,
                             exchange1.creation_time)
        exchange3 = Exchange('id1', 'sub1', 'up1', 'dl1', True,
                             exchange1.creation_time)
        exchange4 = Exchange('id1', 'sub1', 'up1', 'dl1', False,
                             datetime(2000, 1, 1))

        # Then
        assert exchange1 == exchange1bis
        assert exchange1 != exchange2
        assert exchange1 != exchange3
        assert exchange1 != exchange4
Exemple #7
0
def _map_exchange_from_item(item):
    return Exchange(
        item['identifier'], item['sub'], item['upload_token'],
        item['download_token'], item['revoked_upload'],
        datetime.fromtimestamp(float(item['creation_time']), timezone.utc))
Exemple #8
0
 def _generate_exchange(days_before):
     exchange = Exchange.generate('a_test_sub')
     exchange.creation_time = datetime.now(
         timezone.utc) - timedelta(days=days_before)
     return exchange
Exemple #9
0
from datetime import datetime, timezone, timedelta
from typing import List

import pytest

from hallebarde.domain.exchange import Exchange

exchange1 = Exchange('e68faee7-753e-49a6-a372-dc1cdc0dae03', 'sub',
                     '-j1WjK_KnE8cQOVCYOb9WTM-qKLhyfp-DdVXSAjJthE',
                     'ccgxa2udCPYcw9T1mKAXud2hHgOX_14q__KVK7p910E')
exchange2 = Exchange('224c74ed-eeac-47d2-b8fe-165a0e30815f', 'sub',
                     '9WsE02XcMAekmjKHoj9Zq7_uVqc8dVz1Fq8czbZOq_Y',
                     '2yOdhL1NM5lyX7Mt8pHVYfkE51UkoSuGUrv6z4OT-c4')
exchange3 = Exchange('97de5cec-33e6-49ae-8ee8-8865ce357625', 'adifferentsub',
                     'tKcYqm-c0FujZrstLkcwLty_lSVAYxtfPHkRJmwmoxw',
                     'DEXeS6gfdhXOmj9KqmAGvqvFJUc8GCk_ZB4AU_f5Rag')
exchange4 = Exchange('e68faee7-753e-49a6-a372-dc1cdc0dae03',
                     'email@none',
                     '-j1WjK_KnE8cQOVCYOb9WTM-qKLhyfp-DdVXSAjJthE',
                     'ccgxa2udCPYcw9T1mKAXud2hHgOX_14q__KVK7p910E',
                     revoked_upload=True)


@pytest.fixture
def an_exchange() -> Exchange:
    return exchange1


@pytest.fixture
def an_exchange_with_different_sub() -> Exchange:
    return exchange3