Pular para conteúdo

Test finances budget detail view

BudgetAPIDetailTest

Bases: TestCase

Teste para a classe BudgetAPIDetail.

Esta classe contém testes para os métodos da classe BudgetAPIDetail, que lida com operações detalhadas relacionadas a um orçamento específico.

Source code in finances/tests/test_finances_budget_detail_view.py
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
class BudgetAPIDetailTest(TestCase):
    """
    Teste para a classe BudgetAPIDetail.

    Esta classe contém testes para os métodos da classe BudgetAPIDetail, que
    lida com operações detalhadas relacionadas a um orçamento específico.
    """

    def setUp(self):
        """
        Configuração inicial para os testes.

        Este método é executado antes de cada teste. Ele cria instâncias
        iniciais de objetos necessários para os testes.
        """

        self.factory = RequestFactory()

        self.user = User.objects.create_user(
            username='user1',
            password='password1',
            first_name='Carlos',
            last_name='Alberto',
            email='carlos@email.com'
        )

        self.account = Account.objects.create(
            owner=self.user,
            name='Conta Corrente',
            balance=1000
        )

        self.category_1 = Category.objects.create(
            name='Academia'
        )

        self.category_2 = Category.objects.create(
            name='Supermercado'
        )

        self.transaction = Transaction.objects.create(
            amount=200,
            description='Pagamento de academia',
            account=self.account,
            category=self.category_1,
            date=datetime.strptime('2023-08-15', '%Y-%m-%d')
        )

        start_date_1 = datetime.strptime('2023-08-01', '%Y-%m-%d')
        end_date_1 = datetime.strptime('2023-08-31', '%Y-%m-%d')

        self.budget_1 = Budget.objects.create(
            start_date=start_date_1,
            end_date=end_date_1,
            amount=150,
            account=self.account,
            category=self.category_1,
            spent=0
        )

        start_date_2 = datetime.strptime('2023-09-01', '%Y-%m-%d')
        end_date_2 = datetime.strptime('2023-09-30', '%Y-%m-%d')

        self.budget_2 = Budget.objects.create(
            start_date=start_date_2,
            end_date=end_date_2,
            amount=150,
            account=self.account,
            category=self.category_1,
            spent=0
        )

    def test_get(self):
        """
        Testa o método GET para obter o orçamento específico.

        Este teste verifica se o método GET retorna o status HTTP 200 OK para
        uma solicitação de listagem com detalhes de um orçamento válido.
        """

        view = BudgetAPIDetail.as_view()
        request = self.factory.get(f'/api/budget/{self.budget_1.pk}/')
        force_authenticate(request, user=self.user)
        response = view(request, pk=self.budget_1.pk)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

    def test_put_method_success(self):
        """
        Testa o método PUT para atualização dos dados do orçamento.

        Este teste verifica se o método PUT retorna o status HTTP 200 OK para
        uma solicitação de atualização com os dados válidos do orçamento.
        """

        view = BudgetAPIDetail.as_view()
        data = {
            'account': self.account.id,
            'category': self.category_1.id,
            'amount': 200,
            'start_date': '2023-08-01',
            'end_date': '2023-08-31',
            'spent': 0
        }
        request = self.factory.put(
            f'/api/budget/{self.budget_1.pk}/',
            data=json.dumps(data),
            content_type='application/json'
        )
        force_authenticate(request, user=self.user)
        response = view(request, pk=self.budget_1.pk)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(Budget.objects.get(pk=self.budget_1.pk).amount, 200)

    def test_put_method_validation_error(self):
        """
        Testa o método PUT para atualização dos dados inválidos do orçamento.

        Este teste verifica se o método PUT retorna o status HTTP 400 BAD
        REQUEST para uma solicitação de atualização com os dados inválidos do
        orçamento.
        """

        view = BudgetAPIDetail.as_view()
        data = {
            'account': self.account.id,
            'category': self.category_1.id,
            'amount': -200,  # Valor inválido para amount
            'start_date': '2023-08-01',
            'end_date': '2023-08-31',
            'spent': 0
        }
        request = self.factory.put(
            f'/api/budget/{self.budget_1.pk}/',
            data=json.dumps(data),
            content_type='application/json'
        )
        force_authenticate(request, user=self.user)
        response = view(request, pk=self.budget_1.pk)
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertIn('error', response.data)

    def test_delete(self):
        """
        Testa o método DELETE para excluir os dados do orçamento específico.

        Este teste verifica se o método DELETE retorna o status HTTP 204 NO
        CONTENT para uma solicitação de exclusão válida do orçamento.
        """

        view = BudgetAPIDetail.as_view()
        request = self.factory.delete(f'/api/budget/{self.budget_1.pk}/')
        force_authenticate(request, user=self.user)
        response = view(request, pk=self.budget_1.pk)
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

setUp()

Configuração inicial para os testes.

Este método é executado antes de cada teste. Ele cria instâncias iniciais de objetos necessários para os testes.

Source code in finances/tests/test_finances_budget_detail_view.py
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
def setUp(self):
    """
    Configuração inicial para os testes.

    Este método é executado antes de cada teste. Ele cria instâncias
    iniciais de objetos necessários para os testes.
    """

    self.factory = RequestFactory()

    self.user = User.objects.create_user(
        username='user1',
        password='password1',
        first_name='Carlos',
        last_name='Alberto',
        email='carlos@email.com'
    )

    self.account = Account.objects.create(
        owner=self.user,
        name='Conta Corrente',
        balance=1000
    )

    self.category_1 = Category.objects.create(
        name='Academia'
    )

    self.category_2 = Category.objects.create(
        name='Supermercado'
    )

    self.transaction = Transaction.objects.create(
        amount=200,
        description='Pagamento de academia',
        account=self.account,
        category=self.category_1,
        date=datetime.strptime('2023-08-15', '%Y-%m-%d')
    )

    start_date_1 = datetime.strptime('2023-08-01', '%Y-%m-%d')
    end_date_1 = datetime.strptime('2023-08-31', '%Y-%m-%d')

    self.budget_1 = Budget.objects.create(
        start_date=start_date_1,
        end_date=end_date_1,
        amount=150,
        account=self.account,
        category=self.category_1,
        spent=0
    )

    start_date_2 = datetime.strptime('2023-09-01', '%Y-%m-%d')
    end_date_2 = datetime.strptime('2023-09-30', '%Y-%m-%d')

    self.budget_2 = Budget.objects.create(
        start_date=start_date_2,
        end_date=end_date_2,
        amount=150,
        account=self.account,
        category=self.category_1,
        spent=0
    )

test_delete()

Testa o método DELETE para excluir os dados do orçamento específico.

Este teste verifica se o método DELETE retorna o status HTTP 204 NO CONTENT para uma solicitação de exclusão válida do orçamento.

Source code in finances/tests/test_finances_budget_detail_view.py
152
153
154
155
156
157
158
159
160
161
162
163
164
def test_delete(self):
    """
    Testa o método DELETE para excluir os dados do orçamento específico.

    Este teste verifica se o método DELETE retorna o status HTTP 204 NO
    CONTENT para uma solicitação de exclusão válida do orçamento.
    """

    view = BudgetAPIDetail.as_view()
    request = self.factory.delete(f'/api/budget/{self.budget_1.pk}/')
    force_authenticate(request, user=self.user)
    response = view(request, pk=self.budget_1.pk)
    self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

test_get()

Testa o método GET para obter o orçamento específico.

Este teste verifica se o método GET retorna o status HTTP 200 OK para uma solicitação de listagem com detalhes de um orçamento válido.

Source code in finances/tests/test_finances_budget_detail_view.py
83
84
85
86
87
88
89
90
91
92
93
94
95
def test_get(self):
    """
    Testa o método GET para obter o orçamento específico.

    Este teste verifica se o método GET retorna o status HTTP 200 OK para
    uma solicitação de listagem com detalhes de um orçamento válido.
    """

    view = BudgetAPIDetail.as_view()
    request = self.factory.get(f'/api/budget/{self.budget_1.pk}/')
    force_authenticate(request, user=self.user)
    response = view(request, pk=self.budget_1.pk)
    self.assertEqual(response.status_code, status.HTTP_200_OK)

test_put_method_success()

Testa o método PUT para atualização dos dados do orçamento.

Este teste verifica se o método PUT retorna o status HTTP 200 OK para uma solicitação de atualização com os dados válidos do orçamento.

Source code in finances/tests/test_finances_budget_detail_view.py
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
def test_put_method_success(self):
    """
    Testa o método PUT para atualização dos dados do orçamento.

    Este teste verifica se o método PUT retorna o status HTTP 200 OK para
    uma solicitação de atualização com os dados válidos do orçamento.
    """

    view = BudgetAPIDetail.as_view()
    data = {
        'account': self.account.id,
        'category': self.category_1.id,
        'amount': 200,
        'start_date': '2023-08-01',
        'end_date': '2023-08-31',
        'spent': 0
    }
    request = self.factory.put(
        f'/api/budget/{self.budget_1.pk}/',
        data=json.dumps(data),
        content_type='application/json'
    )
    force_authenticate(request, user=self.user)
    response = view(request, pk=self.budget_1.pk)
    self.assertEqual(response.status_code, status.HTTP_200_OK)
    self.assertEqual(Budget.objects.get(pk=self.budget_1.pk).amount, 200)

test_put_method_validation_error()

Testa o método PUT para atualização dos dados inválidos do orçamento.

Este teste verifica se o método PUT retorna o status HTTP 400 BAD REQUEST para uma solicitação de atualização com os dados inválidos do orçamento.

Source code in finances/tests/test_finances_budget_detail_view.py
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
def test_put_method_validation_error(self):
    """
    Testa o método PUT para atualização dos dados inválidos do orçamento.

    Este teste verifica se o método PUT retorna o status HTTP 400 BAD
    REQUEST para uma solicitação de atualização com os dados inválidos do
    orçamento.
    """

    view = BudgetAPIDetail.as_view()
    data = {
        'account': self.account.id,
        'category': self.category_1.id,
        'amount': -200,  # Valor inválido para amount
        'start_date': '2023-08-01',
        'end_date': '2023-08-31',
        'spent': 0
    }
    request = self.factory.put(
        f'/api/budget/{self.budget_1.pk}/',
        data=json.dumps(data),
        content_type='application/json'
    )
    force_authenticate(request, user=self.user)
    response = view(request, pk=self.budget_1.pk)
    self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
    self.assertIn('error', response.data)