Esempio n. 1
0
    def test_all_events(self):
        """Ensure get all events behaves correctly."""
        et1 = add_event_type("x-ray", 500)
        et2 = add_event_type("ct", 2000)
        add_event(et1.id, 5)
        add_event(et1.id, 4)
        add_event(et2.id, 5, reimbursed=True)
        with self.client:
            response = self.client.get('/events')
            data = json.loads(response.data.decode())
            self.assertIn('success', data['status'])
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(data['data']['events']), 3)

            self.assertTrue('created_at' in data['data']['events'][0])
            self.assertEqual(et1.id, data['data']['events'][0]['type_id'])
            self.assertEqual(5, data['data']['events'][0]['caregiver_id'])
            self.assertEqual(False, data['data']['events'][0]['reimbursed'])

            self.assertTrue('created_at' in data['data']['events'][1])
            self.assertEqual(et1.id, data['data']['events'][1]['type_id'])
            self.assertEqual(4, data['data']['events'][1]['caregiver_id'])
            self.assertEqual(False, data['data']['events'][1]['reimbursed'])

            self.assertTrue('created_at' in data['data']['events'][2])
            self.assertEqual(et2.id, data['data']['events'][2]['type_id'])
            self.assertEqual(5, data['data']['events'][2]['caregiver_id'])
            self.assertEqual(True, data['data']['events'][2]['reimbursed'])
Esempio n. 2
0
    def test_report_filter_caregivers(self):
        """Ensure get report filters caregivers."""
        et1 = add_event_type("x-ray", 50000)
        et2 = add_event_type("ct", 200000)
        add_event(et1.id, 4)
        add_event(et2.id, 4)
        add_event(et2.id, 5)
        add_event(et2.id, 5)
        add_event(et2.id, 6)

        report = {
            now.strftime("%Y"): {
                now.strftime("%b"): {
                    '4': {
                        'non-reimbursed SEK': 2500
                    },
                    '6': {
                        'non-reimbursed SEK': 2000
                    }
                }
            }
        }

        with self.client:
            response = self.client.post(
                '/events/report',
                data=json.dumps(dict(caregiver_ids=[4, 6, 7])),
                content_type='application/json',
            )
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertTrue('generated_at' in data['data'])
            self.assertEqual(report, data['data']['report'])
            self.assertIn('success', data['status'])
Esempio n. 3
0
    def test_simple_report(self):
        """Ensure get report behaves correctly."""
        et1 = add_event_type("x-ray", 50000)
        et2 = add_event_type("ct", 200000)
        add_event(et1.id, 4)
        add_event(et2.id, 4)
        add_event(et2.id, 5)
        add_event(et2.id, 5)
        add_event(et2.id, 6)

        report = {
            now.strftime("%Y"): {
                now.strftime("%b"): {
                    '4': {
                        'non-reimbursed SEK': 2500
                    },
                    '5': {
                        'non-reimbursed SEK': 4000
                    },
                    '6': {
                        'non-reimbursed SEK': 2000
                    }
                }
            }
        }

        with self.client:
            response = self.client.get('/events/report')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertTrue('generated_at' in data['data'])
            self.assertEqual(report, data['data']['report'])
            self.assertIn('success', data['status'])
Esempio n. 4
0
 def test_add_event(self):
     """Ensure a new event can be added to the database."""
     et = add_event_type("x-ray", 500)
     with self.client:
         response = self.client.post(
             '/events',
             data=json.dumps(
                 dict(
                     type_id=et.id,
                     caregiver_id=2,
                     start_time=datetime.datetime.now().isoformat(),
                 )),
             content_type='application/json',
         )
         data = json.loads(response.data.decode())
         self.assertEqual(response.status_code, 201)
         self.assertIn('success', data['status'])
         response = self.client.get(f'/events/{data["id"]}')
         data = json.loads(response.data.decode())
         self.assertEqual(response.status_code, 200)
         self.assertTrue('created_at' in data['data'])
         self.assertEqual(et.id, data['data']['type_id'])
         self.assertEqual(2, data['data']['caregiver_id'])
         self.assertEqual(False, data['data']['reimbursed'])
         self.assertIn('success', data['status'])
Esempio n. 5
0
    def test_add_event_missing_json_keys(self):
        """
        Ensure error is thrown if the JSON object lacks any required key.
        """
        et = add_event_type("x-ray", 500)
        with self.client:
            response = self.client.post(
                '/events',
                data=json.dumps(
                    dict(type_id=et.id,
                         start_time=datetime.datetime.now().isoformat())),
                content_type='application/json',
            )
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 400)
            self.assertIn('Invalid payload.', data['message'])
            self.assertIn('fail', data['status'])

            response = self.client.post(
                '/events',
                data=json.dumps(dict(caregiver_id=5)),
                content_type='application/json',
            )
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 400)
            self.assertIn('Invalid payload.', data['message'])
            self.assertIn('fail', data['status'])
Esempio n. 6
0
 def test_delete_event_type_used_in_event(self):
     """Ensure deletion fails when event type is used in events."""
     with self.client:
         et = add_event_type("x-ray", 500)
         event = add_event(et.id, 5)
         response = self.client.delete(f'/events/types/{et.id}')
         data = json.loads(response.data.decode())
         self.assertEqual(response.status_code, 400)
         self.assertIn('Event type is used in existing events.',
                       data['message'])
         self.assertIn('fail', data['status'])
Esempio n. 7
0
    def test_report_filter_time(self):
        """Ensure get report filters by time."""
        et1 = add_event_type("x-ray", 50000)
        et2 = add_event_type("ct", 200000)
        add_event(et1.id, 4, start_time='2017-10-28T23:28:23.456701')
        add_event(et2.id, 4, start_time='2016-10-28T23:28:23.456701')
        add_event(et2.id, 5, start_time='2017-10-28T23:28:23.456701')
        add_event(et2.id, 5, start_time='2017-10-28T23:28:23.456701')
        add_event(et2.id,
                  5,
                  reimbursed=True,
                  start_time='2017-10-28T23:28:23.456701')
        add_event(et2.id, 5, start_time='2018-10-28T23:28:23.456701')

        report = {
            '2017': {
                'Oct': {
                    '4': {
                        'non-reimbursed SEK': 500
                    },
                    '5': {
                        'non-reimbursed SEK': 4000,
                        'reimbursed SEK': 2000
                    }
                }
            }
        }

        with self.client:
            response = self.client.post(
                '/events/report',
                data=json.dumps(
                    dict(min_time='2017-09-28T23:28:23.456701',
                         max_time='2017-11-28T23:28:23.456701')),
                content_type='application/json',
            )
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertTrue('generated_at' in data['data'])
            self.assertEqual(report, data['data']['report'])
            self.assertIn('success', data['status'])
Esempio n. 8
0
    def test_single_event_type(self):
        """Ensure get single event type behaves correctly."""
        et = add_event_type("x-ray", 500)

        with self.client:
            response = self.client.get(f'/events/types/{et.id}')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertEqual(et.id, data['data']['id'])
            self.assertEqual('x-ray', data['data']['name'])
            self.assertEqual(500, data['data']['amount_in_cents'])
            self.assertEqual('SEK', data['data']['currency'])
            self.assertIn('success', data['status'])
Esempio n. 9
0
    def test_all_event_types(self):
        """Ensure get all event types behaves correctly."""
        et1 = add_event_type("x-ray", 500)
        et2 = add_event_type("ct", 2000)
        with self.client:
            response = self.client.get('/events/types')
            data = json.loads(response.data.decode())
            self.assertIn('success', data['status'])
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(data['data']['event_types']), 2)

            self.assertEqual(et1.id, data['data']['event_types'][0]['id'])
            self.assertEqual('x-ray', data['data']['event_types'][0]['name'])
            self.assertEqual(500,
                             data['data']['event_types'][0]['amount_in_cents'])
            self.assertEqual('SEK', data['data']['event_types'][0]['currency'])

            self.assertEqual(et2.id, data['data']['event_types'][1]['id'])
            self.assertEqual('ct', data['data']['event_types'][1]['name'])
            self.assertEqual(2000,
                             data['data']['event_types'][1]['amount_in_cents'])
            self.assertEqual('SEK', data['data']['event_types'][1]['currency'])
Esempio n. 10
0
 def test_add_duplicate_event_type(self):
     """Ensure error is thrown if the event_type name already exists."""
     et = add_event_type("x-ray", 500)
     with self.client:
         response = self.client.post(
             '/events/types',
             data=json.dumps(
                 dict(name="x-ray", amount_in_cents=500, currency="SEK")),
             content_type='application/json',
         )
         data = json.loads(response.data.decode())
         self.assertEqual(response.status_code, 400)
         self.assertIn('Invalid payload.', data['message'])
         self.assertIn('fail', data['status'])
Esempio n. 11
0
    def test_single_event(self):
        """Ensure get single event behaves correctly."""
        et = add_event_type("x-ray", 500)
        event = add_event(et.id, 5)

        with self.client:
            response = self.client.get(f'/events/{event.id}')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertTrue('created_at' in data['data'])
            self.assertEqual(et.id, data['data']['type_id'])
            self.assertEqual(5, data['data']['caregiver_id'])
            self.assertEqual(False, data['data']['reimbursed'])
            self.assertIn('success', data['status'])
Esempio n. 12
0
 def test_add_event_with_wrong_date(self):
     """Ensure error is thrown when start_time is not valid."""
     et = add_event_type("x-ray", 500)
     with self.client:
         response = self.client.post(
             '/events',
             data=json.dumps(
                 dict(type_id=et.id, caregiver_id=2, start_time="fail")),
             content_type='application/json',
         )
         data = json.loads(response.data.decode())
         self.assertEqual(response.status_code, 400)
         self.assertIn('Invalid payload.', data['message'])
         self.assertIn('fail', data['status'])
Esempio n. 13
0
    def test_reimburse_reimbursed_event(self):
        """Ensure reimbursion fails when event is already reimbursed."""
        et = add_event_type("x-ray", 500)
        event = add_event(et.id, 5, reimbursed=True)

        with self.client:
            response = self.client.get(f'/events/{event.id}')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertEqual(True, data['data']['reimbursed'])
            self.assertIn('success', data['status'])

            response = self.client.post(f'/events/{event.id}/reimburse')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 400)
            self.assertIn('Event already reimbursed', data['message'])
            self.assertIn('fail', data['status'])
Esempio n. 14
0
 def test_add_event_ignores_id(self):
     """Ensure new events can be not added with arbitrary id."""
     et = add_event_type("x-ray", 500)
     with self.client:
         response = self.client.post(
             '/events',
             data=json.dumps(
                 dict(
                     id=1337,
                     type_id=et.id,
                     caregiver_id=2,
                     start_time=datetime.datetime.now().isoformat(),
                 )),
             content_type='application/json',
         )
         data = json.loads(response.data.decode())
         self.assertEqual(response.status_code, 201)
         self.assertIn('success', data['status'])
         self.assertEqual(1, data['id'])  # that is, not 1337
Esempio n. 15
0
    def test_delete_event_type(self):
        """Ensure deletion of event type behaves correctly."""
        et = add_event_type("x-ray", 500)

        with self.client:
            response = self.client.get(f'/events/types/{et.id}')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertIn('success', data['status'])

            response = self.client.delete(f'/events/types/{et.id}')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertIn('Event type deleted', data['message'])
            self.assertIn('success', data['status'])

            response = self.client.get(f'/events/types/{et.id}')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 404)
            self.assertIn('Event type does not exist', data['message'])
            self.assertIn('fail', data['status'])
Esempio n. 16
0
    def test_reimburse_event(self):
        """Ensure reimbursion of event behaves correctly."""
        et = add_event_type("x-ray", 500)
        event = add_event(et.id, 5)

        with self.client:
            response = self.client.get(f'/events/{event.id}')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertEqual(False, data['data']['reimbursed'])
            self.assertIn('success', data['status'])

            response = self.client.post(f'/events/{event.id}/reimburse')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertIn('Event reimbursed', data['message'])
            self.assertIn('success', data['status'])

            response = self.client.get(f'/events/{event.id}')
            data = json.loads(response.data.decode())
            self.assertEqual(response.status_code, 200)
            self.assertEqual(True, data['data']['reimbursed'])
            self.assertIn('success', data['status'])
Esempio n. 17
0
 def test_add_event_always_not_imbursed(self):
     """Ensure new events can be not added as already reimbursed."""
     et = add_event_type("x-ray", 500)
     with self.client:
         response = self.client.post(
             '/events',
             data=json.dumps(
                 dict(
                     type_id=et.id,
                     caregiver_id=2,
                     start_time=datetime.datetime.now().isoformat(),
                     reimbursed=True,
                 )),
             content_type='application/json',
         )
         data = json.loads(response.data.decode())
         self.assertEqual(response.status_code, 201)
         self.assertIn('success', data['status'])
         response = self.client.get(f'/events/{data["id"]}')
         data = json.loads(response.data.decode())
         self.assertEqual(response.status_code, 200)
         self.assertEqual(False, data['data']['reimbursed'])
         self.assertIn('success', data['status'])