Exemplo n.º 1
0
    def test_query_delete_entries_propagated_from_nested_qs(self):
        item_1 = MockModel(foo=1, bar='a', mock_name='item_1')
        item_2 = MockModel(foo=1, bar='b', mock_name='item_2')

        self.mock_set.add(item_1, item_2)
        self.mock_set.filter(bar='b').delete()

        assert len(self.mock_set) == 1, len(self.mock_set)
        assert item_1 in self.mock_set
        assert item_2 not in self.mock_set
Exemplo n.º 2
0
    def test_query_get_or_create_gets_existing_unique_match(self):
        item_1 = MockModel(foo=1)
        item_2 = MockModel(foo=2)
        item_3 = MockModel(foo=3)

        self.mock_set.add(item_1, item_2, item_3)
        obj, created = self.mock_set.get_or_create(foo=2)

        assert obj == item_2
        assert created is False
Exemplo n.º 3
0
    def test_query_removes_items_from_set(self):
        item_1 = MockModel(foo=1)
        item_2 = MockModel(foo=2)

        self.mock_set.add(item_1, item_2)
        self.mock_set.remove(foo=1)
        items = list(self.mock_set)

        assert item_1 not in items
        assert item_2 in items
Exemplo n.º 4
0
    def test_query_update_or_create_raises_does_multiple_objects_returned_when_more_than_one_match(
            self):
        item_1 = MockModel(foo=1)
        item_2 = MockModel(foo=1)
        item_3 = MockModel(foo=2)

        self.mock_set.add(item_1, item_2, item_3)
        self.assertRaises(MultipleObjectsReturned,
                          self.mock_set.update_or_create,
                          foo=1)
Exemplo n.º 5
0
    def test_query_latest_returns_the_last_element_from_ordered_set_using_field_name_kwarg(
            self):
        item_1 = MockModel(foo=1)
        item_2 = MockModel(foo=2)
        item_3 = MockModel(foo=3)

        self.mock_set.add(item_3, item_1, item_2)
        latest = self.mock_set.latest(field_name='foo')

        assert latest == item_3
Exemplo n.º 6
0
 def test_query_return_self_methods_accept_any_parameters_and_return_instance(
         self):
     qs = MockSet(MockModel(foo=1), MockModel(foo=2))
     assert qs == qs.all()
     assert qs == qs.only('f1')
     assert qs == qs.defer('f2', 'f3')
     assert qs == qs.using('default')
     assert qs == qs.select_related('t1', 't2')
     assert qs == qs.prefetch_related('t3', 't4')
     assert qs == qs.select_for_update()
Exemplo n.º 7
0
    def test_query_update_with_multiple_values(self):
        objects = [MockModel(foo=1), MockModel(foo=2), MockModel(foo=3)]
        qs = MockSet(*objects, model=create_model('foo', 'bar'))

        set_foo, set_bar = 4, 5
        qs.update(foo=set_foo, bar=set_bar)

        for x in qs:
            assert x.foo == set_foo, x.foo
            assert x.bar == set_bar, x.bar
Exemplo n.º 8
0
    def test_query_update_or_create_raises_model_not_specified_with_defaults_when_mockset_model_is_none(
            self):
        qs = MockSet()
        item_1 = MockModel(first=1)
        item_2 = MockModel(second=2)
        item_3 = MockModel(third=3)
        qs.add(item_1, item_2, item_3)

        with self.assertRaises(ModelNotSpecified):
            qs.update_or_create(defaults={'first': 3, 'third': 2}, second=1)
Exemplo n.º 9
0
    def test_query_aggregate_multiple_params_with_none_only_field_values_aggregation_with_none(self):
        items = [
            MockModel(foo=None),
            MockModel(foo=None),
            MockModel(foo=None),
            MockModel(foo=None)
        ]
        self.mock_set.add(*items)

        expr_sum = MagicMock(function=AGGREGATES_SUM, source_expressions=[MockModel(name='foo')])
        expr_max = MagicMock(function=AGGREGATES_MAX, source_expressions=[MockModel(name='foo')])
        expr_min = MagicMock(function=AGGREGATES_MIN, source_expressions=[MockModel(name='foo')])
        expr_count = MagicMock(function=AGGREGATES_COUNT, source_expressions=[MockModel(name='foo')])
        expr_avg = MagicMock(function=AGGREGATES_AVG, source_expressions=[MockModel(name='foo')])

        result = self.mock_set.aggregate(expr_sum, expr_max, expr_min, expr_count, expr_avg,
                                         sum=expr_sum, max=expr_max, min=expr_min, count=expr_count, avg=expr_avg)

        assert result['foo__sum'] is None
        assert result['foo__max'] is None
        assert result['foo__min'] is None
        assert result['foo__count'] == 0
        assert result['foo__avg'] is None
        assert result['sum'] is None
        assert result['max'] is None
        assert result['min'] is None
        assert result['count'] == 0
        assert result['avg'] is None
def test_category_awarding_subagency_subawards(mock_matviews_qs,
                                               mock_agencies):
    mock_subtier = MockModel(subtier_agency_id=1,
                             name='Department of Sub-pizza',
                             abbreviation='DOSP')
    mock_agency = MockModel(id=2,
                            subtier_agency=mock_subtier,
                            toptier_flag=False)
    mock_agency_1 = MockModel(id=3,
                              subtier_agency=mock_subtier,
                              toptier_flag=True)
    mock_model_1 = MockModel(
        awarding_agency_id=2,
        awarding_subtier_agency_name='Department of Sub-pizza',
        awarding_subtier_agency_abbreviation='DOSP',
        amount=10)
    mock_model_2 = MockModel(
        awarding_agency_id=3,
        awarding_subtier_agency_name='Department of Sub-pizza',
        awarding_subtier_agency_abbreviation='DOSP',
        amount=10)

    add_to_mock_objects(mock_matviews_qs, [mock_model_1, mock_model_2])
    add_to_mock_objects(mock_agencies['agency'], [mock_agency, mock_agency_1])

    test_payload = {
        'category': 'awarding_subagency',
        'subawards': True,
        'page': 1,
        'limit': 50
    }

    spending_by_category_logic = BusinessLogic(test_payload).results()

    expected_response = {
        'category':
        'awarding_subagency',
        'limit':
        50,
        'page_metadata': {
            'page': 1,
            'next': None,
            'previous': None,
            'hasNext': False,
            'hasPrevious': False
        },
        'results': [{
            'amount': 20,
            'name': 'Department of Sub-pizza',
            'code': 'DOSP',
            'id': 2
        }]
    }

    assert expected_response == spending_by_category_logic
Exemplo n.º 11
0
    def test_query_aggregate_with_none_only_field_values_performs_correct_aggregation(
            self):
        items = [
            MockModel(foo=None),
            MockModel(foo=None),
            MockModel(foo=None),
            MockModel(foo=None)
        ]
        self.mock_set.add(*items)

        expr_sum = MagicMock(function=AGGREGATES_SUM,
                             source_expressions=[MockModel(name='foo')])
        expr_max = MagicMock(function=AGGREGATES_MAX,
                             source_expressions=[MockModel(name='foo')])
        expr_min = MagicMock(function=AGGREGATES_MIN,
                             source_expressions=[MockModel(name='foo')])
        expr_count = MagicMock(function=AGGREGATES_COUNT,
                               source_expressions=[MockModel(name='foo')])
        expr_avg = MagicMock(function=AGGREGATES_AVG,
                             source_expressions=[MockModel(name='foo')])

        result_sum = self.mock_set.aggregate(expr_sum)
        result_max = self.mock_set.aggregate(expr_max)
        result_min = self.mock_set.aggregate(expr_min)
        result_count = self.mock_set.aggregate(expr_count)
        result_avg = self.mock_set.aggregate(expr_avg)

        assert result_sum['foo__sum'] is None
        assert result_max['foo__max'] is None
        assert result_min['foo__min'] is None
        assert result_count['foo__count'] == 0
        assert result_avg['foo__avg'] is None
Exemplo n.º 12
0
    def test_query_distinct_with_fields(self):
        item_1 = MockModel(foo=1, bar='c', foo_bar='x', mock_name='item_1')
        item_2 = MockModel(foo=2, bar='a', foo_bar='y', mock_name='item_2')
        item_3 = MockModel(foo=1, bar='c', foo_bar='z', mock_name='item_3')

        self.mock_set.add(item_2, item_3, item_1, item_3)
        results = list(
            self.mock_set.order_by('foo', 'bar',
                                   'foo_bar').distinct('foo', 'bar'))

        assert results == [item_1, item_2], results
Exemplo n.º 13
0
    def test_query_get_or_create_raises_does_multiple_objects_returned_when_more_than_one_match_with_defaults(
            self):
        qs = MockSet(model=create_model('first', 'second', 'third'))
        item_1 = MockModel(first=1)
        item_2 = MockModel(first=1)
        item_3 = MockModel(third=3)
        qs.add(item_1, item_2, item_3)

        qs.add(item_1, item_2, item_3)
        with self.assertRaises(MultipleObjectsReturned):
            qs.get_or_create(first=1, defaults={'second': 2})
Exemplo n.º 14
0
    def test_query_filters_items_by_q_object_and(self):
        item_1 = MockModel(mock_name='#1', foo=1, bar='a')
        item_2 = MockModel(mock_name='#2', foo=1, bar='b')
        item_3 = MockModel(mock_name='#3', foo=3, bar='b')

        self.mock_set.add(item_1, item_2, item_3)
        results = list(self.mock_set.filter(Q(foo=1) & Q(bar='b')))

        assert item_1 not in results
        assert item_2 in results
        assert item_3 not in results
Exemplo n.º 15
0
    def test_model_choice_field_parse(self):
        qs = MockSet(MockModel(pk=0),
                     MockModel(pk=1),
                     MockModel(pk=2),
                     model=ModelTest)
        field = forms.ModelChoiceField(queryset=qs)

        self.assertEqual(format_data(field, 0), 0)
        self.assertEqual(format_data(field, 1), 1)
        self.assertEqual(format_data(field, 2), 2)
        self.assertRaises(ValidationError, lambda: format_data(field, 4))
Exemplo n.º 16
0
    def test_query_filters_items_by_q_object_or(self):
        item_1 = MockModel(mock_name='#1', foo=1)
        item_2 = MockModel(mock_name='#2', foo=2)
        item_3 = MockModel(mock_name='#3', foo=3)

        self.mock_set.add(item_1, item_2, item_3)
        results = list(self.mock_set.filter(Q(foo=1) | Q(foo=2)))

        assert item_1 in results
        assert item_2 in results
        assert item_3 not in results
Exemplo n.º 17
0
    def test_query_get_or_create_creates_new_model_when_no_match(self):
        item_1 = MockModel(foo=1)
        item_2 = MockModel(foo=2)
        item_3 = MockModel(foo=3)

        qs = MockSet(model=create_model('foo'))
        qs.add(item_1, item_2, item_3)
        obj, created = qs.get_or_create(foo=4)

        assert hasattr(obj, 'foo') and obj.foo == 4
        assert created is True
Exemplo n.º 18
0
    def test_query_filters_items_by_boolean_attributes(self):
        item_1 = MockModel(foo=True, bar=True)
        item_2 = MockModel(foo=True, bar=False)
        item_3 = MockModel(foo=False, bar=False)

        self.mock_set.add(item_1, item_2, item_3)
        results = list(self.mock_set.filter(foo=True, bar=False))

        assert item_1 not in results
        assert item_2 in results
        assert item_3 not in results
Exemplo n.º 19
0
    def test_query_filters_items_by_attributes(self):
        item_1 = MockModel(foo=1, bar='a')
        item_2 = MockModel(foo=1, bar='b')
        item_3 = MockModel(foo=2, bar='b')

        self.mock_set.add(item_1, item_2, item_3)
        results = list(self.mock_set.filter(foo=1, bar='b'))

        assert item_1 not in results
        assert item_2 in results
        assert item_3 not in results
Exemplo n.º 20
0
    def test_query_exclude(self):
        item_1 = MockModel(foo=1, bar='a')
        item_2 = MockModel(foo=1, bar='b')
        item_3 = MockModel(foo=2, bar='b')

        self.mock_set.add(item_1, item_2, item_3)
        results = list(self.mock_set.exclude(foo=1, bar='b'))

        assert item_1 in results, results
        assert item_2 not in results, results
        assert item_3 in results, results
Exemplo n.º 21
0
    def test_query_filters_items_by_q_object_with_negation(self):
        item_1 = MockModel(mock_name='#1', foo=1, bar='a')
        item_2 = MockModel(mock_name='#2', foo=1, bar='b')
        item_3 = MockModel(mock_name='#3', foo=3, bar='b')

        self.mock_set.add(item_1, item_2, item_3)
        results = list(self.mock_set.filter(~Q(foo=1) | Q(bar='a')))

        assert item_1 in results
        assert item_2 not in results
        assert item_3 in results
def test_category_funding_agency_awards(mock_matviews_qs, mock_agencies):
    mock_toptier = MockModel(toptier_agency_id=1,
                             name='Department of Calzone',
                             abbreviation='DOC')
    mock_agency = MockModel(id=2,
                            toptier_agency=mock_toptier,
                            toptier_flag=True)
    mock_agency_1 = MockModel(id=3,
                              toptier_agency=mock_toptier,
                              toptier_flag=False)
    mock_model_1 = MockModel(
        funding_agency_id=2,
        funding_toptier_agency_name='Department of Calzone',
        funding_toptier_agency_abbreviation='DOC',
        generated_pragmatic_obligation=50)
    mock_model_2 = MockModel(
        funding_agency_id=3,
        funding_toptier_agency_name='Department of Calzone',
        funding_toptier_agency_abbreviation='DOC',
        generated_pragmatic_obligation=50)

    add_to_mock_objects(mock_matviews_qs, [mock_model_1, mock_model_2])
    add_to_mock_objects(mock_agencies['agency'], [mock_agency, mock_agency_1])

    test_payload = {
        'category': 'funding_agency',
        'subawards': False,
        'page': 1,
        'limit': 50
    }

    spending_by_category_logic = BusinessLogic(test_payload).results()

    expected_response = {
        'category':
        'funding_agency',
        'limit':
        50,
        'page_metadata': {
            'page': 1,
            'next': None,
            'previous': None,
            'hasNext': False,
            'hasPrevious': False
        },
        'results': [{
            'amount': 100,
            'name': 'Department of Calzone',
            'code': 'DOC',
            'id': 2
        }]
    }

    assert expected_response == spending_by_category_logic
def test_category_federal_accounts(mock_matviews_qs):

    mock_model_1 = MockModel(
        federal_account_id=10,
        federal_account_display="020-0001",
        account_title="Test Federal Account",
        recipient_hash="00000-00000-00000-00000-00000",
        parent_recipient_unique_id="000000",
        generated_pragmatic_obligation=1,
    )
    mock_model_2 = MockModel(
        federal_account_id=10,
        federal_account_display="020-0001",
        account_title="Test Federal Account",
        recipient_hash="00000-00000-00000-00000-00000",
        parent_recipient_unique_id="000000",
        generated_pragmatic_obligation=2,
    )
    add_to_mock_objects(mock_matviews_qs, [mock_model_1, mock_model_2])

    test_payload = {
        "category": "federal_account",
        "filters": {
            "recipient_id": "00000-00000-00000-00000-00000-C"
        },
        "subawards": False,
        "page": 1,
        "limit": 50,
    }

    spending_by_category_logic = BusinessLogic(test_payload).results()

    expected_response = {
        "category":
        "federal_account",
        "limit":
        50,
        "page_metadata": {
            "page": 1,
            "next": None,
            "previous": None,
            "hasNext": False,
            "hasPrevious": False
        },
        "results": [{
            "amount": 3,
            "code": "020-0001",
            "name": "Test Federal Account",
            "id": 10
        }],
    }

    assert expected_response == spending_by_category_logic
Exemplo n.º 24
0
    def test_query_latest_raises_error_when_both_fields_args_and_field_name_kwarg_supplied(
            self):
        item_1 = MockModel(foo=1, bar='a')
        item_2 = MockModel(foo=2, bar='b')
        item_3 = MockModel(foo=3, bar='c')

        self.mock_set.add(item_3, item_1, item_2)

        self.assertRaises(ValueError,
                          self.mock_set.latest,
                          'foo',
                          field_name='bar')
Exemplo n.º 25
0
    def test_named_query_values_list(self):
        item_1 = MockModel(foo=1, bar=3)
        item_2 = MockModel(foo=2, bar=4)

        qs = MockSet(item_1, item_2)
        results_with_named_fields_fields = qs.values_list('foo',
                                                          'bar',
                                                          named=True)
        assert results_with_named_fields_fields[0].foo == 1
        assert results_with_named_fields_fields[0].bar == 3
        assert results_with_named_fields_fields[1].foo == 2
        assert results_with_named_fields_fields[1].bar == 4
def test_category_naics_awards(mock_matviews_qs):
    mock_model_1 = MockModel(naics_code='NAICS 1234',
                             naics_description='NAICS DESC 1234',
                             generated_pragmatic_obligation=1)
    mock_model_2 = MockModel(naics_code='NAICS 1234',
                             naics_description='NAICS DESC 1234',
                             generated_pragmatic_obligation=1)
    mock_model_3 = MockModel(naics_code='NAICS 9876',
                             naics_description='NAICS DESC 9876',
                             generated_pragmatic_obligation=2)
    mock_model_4 = MockModel(naics_code='NAICS 9876',
                             naics_description='NAICS DESC 9876',
                             generated_pragmatic_obligation=2)

    add_to_mock_objects(
        mock_matviews_qs,
        [mock_model_1, mock_model_2, mock_model_3, mock_model_4])

    test_payload = {
        'category': 'naics',
        'subawards': False,
        'page': 1,
        'limit': 50
    }

    spending_by_category_logic = BusinessLogic(test_payload).results()

    expected_response = {
        'category':
        'naics',
        'limit':
        50,
        'page_metadata': {
            'page': 1,
            'next': None,
            'previous': None,
            'hasNext': False,
            'hasPrevious': False
        },
        'results': [{
            'amount': 4,
            'code': 'NAICS 9876',
            'name': 'NAICS DESC 9876',
            'id': None
        }, {
            'amount': 2,
            'code': 'NAICS 1234',
            'name': 'NAICS DESC 1234',
            'id': None
        }]
    }

    assert expected_response == spending_by_category_logic
Exemplo n.º 27
0
    def test_login_invalid_user(self):
        data = {'username': '******', 'password': '******'}
        users = MockSet(
            MockModel(username='******', password='******'),
            MockModel(username='******', password='******'))

        LoginSerializer._get_queryset = MagicMock(return_value=users)

        serializer = LoginSerializer(data=data)

        with self.assertRaises(ValidationError):
            serializer.is_valid(raise_exception=True)
Exemplo n.º 28
0
    def test_query_update_or_create_gets_existing_unique_match_with_defaults(self):
        qs = MockSet(
            model=create_model('first', 'second', 'third')
        )
        item_1 = MockModel(first=1)
        item_2 = MockModel(second=2)
        item_3 = MockModel(third=3)
        qs.add(item_1, item_2, item_3)

        obj, created = qs.update_or_create(defaults={'first': 3, 'third': 1}, second=2)

        assert hasattr(obj, 'second') and obj.second == 2
        assert created is False
Exemplo n.º 29
0
    def test_query_update_does_not_allow_related_model_fields(self):
        objects = [
            MockModel(foo=MockModel(bar=1)),
            MockModel(foo=MockModel(bar=2))
        ]
        qs = MockSet(*objects, model=create_model('foo'))

        target = dict(foo__bar=2)
        with self.assertRaises(FieldError) as cm:
            qs.update(**target)

        assert 'Cannot update model field \'{}\''.format(next(
            iter(target))) in str(cm.exception)
Exemplo n.º 30
0
    def test_query_aggregate_performs_min_on_queryset_field(self):
        items = [
            MockModel(foo=5),
            MockModel(foo=10),
            MockModel(foo=15),
            MockModel(foo=None)
        ]
        self.mock_set.add(*items)

        expr = MagicMock(function=AGGREGATES_MIN, source_expressions=[MockModel(name='foo')])
        result = self.mock_set.aggregate(expr)

        assert result['foo__min'] == min([x.foo for x in items if x.foo is not None])
def test_category_federal_accounts_subawards(
    mock_matviews_qs, mock_federal_account, mock_tas, mock_award, mock_financial_account, mock_transaction
):
    fa = MockModel(id=10, agency_identifier="020", main_account_code="0001", account_title="Test Federal Account")
    add_to_mock_objects(mock_federal_account, [fa])

    tas = MockModel(treasury_account_identifier=2, federal_account_id=10)
    add_to_mock_objects(mock_tas, [tas])

    award = MockModel(id=3)
    add_to_mock_objects(mock_award, [award])

    fs = MockModel(financial_accounts_by_awards_id=4, submission_id=3, treasury_account=tas, award=award)
    add_to_mock_objects(mock_financial_account, [fs])

    award.financial_set = MockSet(fs)
    t1 = MockModel(award=award, id=5)
    t2 = MockModel(award=award, id=6)
    add_to_mock_objects(mock_transaction, [t1, t2])

    mock_model_1 = MockModel(
        transaction=t1, recipient_hash="00000-00000-00000-00000-00000", parent_recipient_unique_id="000000", amount=1
    )
    mock_model_2 = MockModel(
        transaction=t2, recipient_hash="00000-00000-00000-00000-00000", parent_recipient_unique_id="000000", amount=1
    )
    add_to_mock_objects(mock_matviews_qs, [mock_model_1, mock_model_2])

    test_payload = {
        "category": "federal_account",
        "filters": {"recipient_id": "00000-00000-00000-00000-00000-C"},
        "subawards": True,
        "page": 1,
        "limit": 50,
    }

    spending_by_category_logic = BusinessLogic(test_payload).results()

    expected_response = {
        "category": "federal_account",
        "limit": 50,
        "page_metadata": {"page": 1, "next": None, "previous": None, "hasNext": False, "hasPrevious": False},
        "results": [{"amount": 2, "code": "020-0001", "name": "Test Federal Account", "id": 10}],
    }

    assert expected_response == spending_by_category_logic