def test_access_unauthorized_method(self):
     headers = {}
     add_authorization_header(headers,
                              self.roomies[0].login,
                              self.roomies[0].password)
     status, data = self.client.request('HEAD', '/money', headers=headers)
     self.assertEqual(405, status)
     self.assertEqual(0, len(data))
 def test_retrieve_nothing(self):
     headers = {}
     add_authorization_header(headers,
                              self.roomies[0].login,
                              self.roomies[0].password)
     status, data = self.client.request('GET', '/money', headers=headers)
     self.assertEqual(200, status)
     self.assertEqual('[]', data)
 def test_get_user(self):
     headers = {}
     add_authorization_header(headers,
                              self.roomies[0].login,
                              self.roomies[0].password)
     status, data =\
         self.client.request('GET', '/users/me', headers=headers)
     self.assertEqual(200, status)
     logged_user = \
         json.loads(data , object_hook=User.from_json)
     self.assertEqual(self.roomies[0].user_id, logged_user.user_id)
 def test_user_creation(self):
     # Log in as a user of houseshare id 1 and retrieve all the roomies
     # from this user's houseshare
     headers = {}
     add_authorization_header(headers,
                              self.roomies[0].login,
                              self.roomies[0].password)
     status, data = self.client.request('GET', '/users', headers=headers)
     self.assertEqual(200, status)
     users_list = \
         json.loads(data, object_hook=User.from_json)
     # 3 users + admin
     self.assertEqual(4, len(users_list))
     for user in users_list:
         self.assertEqual(self.houseshare_id, user.houseshare_id)
    def test_unauthorized_delete(self):
        headers = {}
        add_authorization_header(headers,
                                 self.roomies[0].login,
                                 self.roomies[0].password)

        # Nothing to delete => 404
        status, _ =\
            self.client.request('DELETE',
                                '/money/{}'.format(12),
                                headers=headers)
        self.assertEqual(404, status)

        # Rotten request
        status, _ =\
            self.client.request('DELETE',
                                '/money/{}'.format("wrong"),
                                headers=headers)
        self.assertEqual(400, status)

        new_expense = create_expense()
        new_expense_str =  json.dumps(new_expense)
        status, data =\
            self.client.request('POST', '/money', new_expense_str, headers=headers)
        self.assertEqual(200, status)
        retrieved_expense = json.loads(data)

        # An other roomie tries to erase an expense not belonging to himself
        add_authorization_header(headers,
                                 self.roomies[1].login,
                                 self.roomies[1].password)
        status, _ =\
            self.client.request('DELETE',
                                '/money/{}'.format(retrieved_expense["id"]),
                                headers=headers)
        self.assertEqual(403, status)
    def test_create_delete(self):
        new_expense = create_expense()
        new_expense_str =  json.dumps(new_expense)
        headers = {}
        add_authorization_header(headers,
                                 self.roomies[0].login,
                                 self.roomies[0].password)

        # Inserting a new expense
        status, data =\
            self.client.request('POST', '/money', new_expense_str, headers=headers)
        self.assertEqual(200, status)
        self.assertTrue(len(data) > 0)
        inserted_expense = json.loads(data)
        self.assertEqual(new_expense['date'], inserted_expense['date'])

        # Retrieve a list of the expense by the user who created the expense
        status, data = self.client.request('GET', '/money', headers=headers)
        self.assertEqual(200, status)
        self.assertTrue(len(data) > 0)
        retrieved_expense = json.loads(data)
        self.assertEqual(1, len(retrieved_expense))

        # Retrieve a list of expenses from another user belonging to the same
        # houseshare => same behaviour as in the previous example
        add_authorization_header(headers,
                                 self.roomies[1].login,
                                 self.roomies[1].password)
        status, data = self.client.request('GET', '/money', headers=headers)
        self.assertEqual(200, status)
        self.assertTrue(len(data) > 0)
        retrieved_expense = json.loads(data)
        self.assertEqual(1, len(retrieved_expense))

        # Delete the expense
        add_authorization_header(headers,
                                 self.roomies[0].login,
                                 self.roomies[0].password)
        status, data =\
            self.client.request('DELETE',
                                '/money/{}'.format(retrieved_expense[0]["id"]),
                                headers=headers)
        self.assertEqual(200, status)
        self.assertEqual(0, len(data))

        # Check there is no expense at the end of this test
        status, data = self.client.request('GET', '/money', headers=headers)
        self.assertEqual(200, status)
        self.assertEqual("[]", data)