Exemple #1
0
    def test_endpoint_happypath_change_drink_1_ingredient(
            self, mock_get_token_auth_header, mock_verify_decode_jwt):
        mock_get_token_auth_header.return_value = 'manager-token'
        mock_verify_decode_jwt.return_value = {
            'permissions': ['delete:drinks', 'get:drinks-detail',
                            'patch:drinks', 'post:drinks']
        }

        payload = deepcopy(self.payload)
        payload['recipe'] = payload['recipe'][0]

        response = self.client.patch('/drinks/1', json=payload,
                                     content_type='application/json')
        self.assertEqual(200, response.status_code)

        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'success', bool, True)
        assert_payload_field_type(self, data, 'drinks', list)

        next_drink = data['drinks'][0]
        assert_payload_field_type(self, next_drink, 'id', int)
        assert_payload_field_type_value(self, next_drink, 'title', str,
                                        self.drink_name)
        assert_payload_field_type(self, next_drink, 'recipe', list)
        self.assertEqual(1, len(next_drink['recipe']))

        next_recipe = next_drink['recipe'][0]
        self.assertIsInstance(next_recipe, dict)
        assert_payload_field_type_value(self, next_recipe, 'name', str,
                                        self.recipe_name_1)
        assert_payload_field_type_value(self, next_recipe, 'color', str,
                                        self.recipe_color_1)
        assert_payload_field_type_value(self, next_recipe, 'parts', int,
                                        self.recipe_parts_1)
Exemple #2
0
    def test_happy_path_user_quest_progress_can_be_patched(self):
        payload = deepcopy(self.payload)
        response = self.client.patch(f'/api/v1/users/{self.user_1.id}/quests',
                                     json=payload,
                                     content_type='application/json')

        self.assertEqual(201, response.status_code)
        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type(self, data, 'data', dict)

        all_user_quest_data = data['data']

        assert_payload_field_type_value(self, all_user_quest_data, 'id', int,
                                        self.user_quest_1.id)
        assert_payload_field_type_value(self, all_user_quest_data, 'type', str,
                                        'user_quests')
        assert_payload_field_type(self, all_user_quest_data, 'attributes',
                                  dict)

        attributes = all_user_quest_data['attributes']

        assert_payload_field_type_value(self, attributes, 'response', str,
                                        'successful')
        assert_payload_field_type_value(self, attributes, 'progress', int,
                                        int(payload['progress']))
        assert_payload_field_type_value(self, attributes, 'completion_status',
                                        bool, False)
Exemple #3
0
    def test_401_error_no_auth_header(self):
        response = self.client.get('/auth-required', headers={})
        self.assertEqual(response.status_code, 401)

        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'message', str,
                                        'unauthorized')
        assert_payload_field_type_value(self, data, 'success', bool, False)
    def test_happypath_get_empty_users(self):
        response = self.client.get(f'/api/v1/users')
        self.assertEqual(200, response.status_code)

        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'success', bool, True)
        assert_payload_field_type(self, data, 'results', list)
        # results list should be empty
        self.assertEqual(0, len(data['results']))
    def test_endpoint_will_return_a(self):
        payload = {'email': '*****@*****.**'}
        response = self.client.post('/api/v1/users',
                                    json=payload,
                                    content_type='application/json')
        self.assertEqual(201, response.status_code)

        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'user_action', str,
                                        'created')
    def test_invalid_user_id(self):
        response = self.client.get('/users/9999')

        error_message = 'The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.'

        data = json.loads(response.data.decode('utf-8'))

        self.assertEqual(404, response.status_code)
        assert_payload_field_type_value(self, data, 'message', str,
                                        error_message)
Exemple #7
0
 def test_happypath_blank_name(self):
     payload = deepcopy(self.payload)
     payload['name'] = ' '
     response = self.client.post(
         '/api/v1/reports', json=payload,
         content_type='application/json'
     )
     self.assertEqual(201, response.status_code)
     data = json.loads(response.data.decode('utf-8'))
     assert_payload_field_type_value(self, data, 'success', bool, True)
     assert_payload_field_type_value(self, data, 'name', str, 'Anonymous')
    def test_endpoint_sadpath_username_is_same_unique_email(self):
        user_1 = User(username='******', email='*****@*****.**', xp=0)
        user_1.insert()

        payload = {'username': '******', 'email': '*****@*****.**'}

        response = self.client.post('/api/v1/users',
                                    json=payload,
                                    content_type='application/json')
        data = json.loads(response.data.decode('utf-8'))
        self.assertEqual(201, response.status_code)
        assert_payload_field_type_value(self, data, 'user_action', str,
                                        'created')
Exemple #9
0
  def test_happypath_get_empty_rooms(self):
    user_1 = User(name='Test User', email='email 1')
    user_1.insert()

    response = self.client.get(
      f'/api/v1/users/{user_1.id}/rooms'
    )
    self.assertEqual(200, response.status_code)

    data = json.loads(response.data.decode('utf-8)'))
    assert_payload_field_type_value(self, data, 'success', bool, True)
    assert_payload_field_type(self, data, 'data', list)
    self.assertEqual(0, len(data['data']))
    def test_sad_path_user_has_zero_contacts(self):
        user = User(email='*****@*****.**',
                    first_name='example',
                    last_name='fake')
        user.insert()

        response = self.client.get(f'/users/{user.id}/contacts')

        self.assertEqual(200, response.status_code)

        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'success', bool, True)
        assert_payload_field_type(self, data, 'contacts', list)
        self.assertEqual(0, len(data['contacts']))
Exemple #11
0
    def test_happypath_get_a_room(self):
      user_1 = User(name='Test User', email='email 1')
      user_1.insert()
      room_1 = Room(name='Kitchen', image='exampleimage1.com', user_id=user_1.id)
      room_1.insert()
      room_2 = Room(name='Living Room', image='exampleimage2.com', user_id=user_1.id)
      room_2.insert()

      response = self.client.get(
      f'/api/v1/rooms/{room_2.id}'
      )
      self.assertEqual(200, response.status_code)

      data = json.loads(response.data.decode('utf-8'))
      assert_payload_field_type_value(self, data, 'success', bool, True)
      
      results = data['data']
     
      assert_payload_field_type_value(
            self, results, 'name', str, room_2.name
        )
      assert_payload_field_type_value(
          self, results, 'image', str, room_2.image
      )
      assert_payload_field_type_value(
          self, results, 'user_id', int, user_1.id
      )
Exemple #12
0
    def test_happypath_get_empty_rooms(self):
        user_1 = User(name='Test User', email='email 1')
        user_1.insert()
        room_1 = Room(name='Kitchen',
                      image='exampleimage1.com',
                      user_id=user_1.id)
        room_1.insert()

        response = self.client.get(f'/api/v1/rooms/{room_1.id}/memories')
        self.assertEqual(200, response.status_code)

        data = json.loads(response.data.decode('utf-8)'))
        assert_payload_field_type_value(self, data, 'success', bool, True)
        assert_payload_field_type(self, data, 'data', list)
        self.assertEqual(0, len(data['data']))
Exemple #13
0
  def test_happypath_login_user(self): 
    payload = deepcopy(self.payload)

    response = self.client.post(
      '/login', json=payload,
      content_type='application/json'
    )

    self.assertEqual(200, response.status_code)

    data = json.loads(response.data.decode('utf-8'))
    assert_payload_field_type_value(self, data, 'success', bool, True)
    assert_payload_field_type_value(self, data, 'id', int, self.user_1.id)
    assert_payload_field_type_value(self, data, 'first_name', str, self.user_1.first_name)
    assert_payload_field_type_value(self, data, 'last_name', str, self.user_1.last_name)
    assert_payload_field_type_value(self, data, 'email', str, self.user_1.email)
    def test_happypath_show_user(self):
        response = self.client.get(f'/users/{self.user_1.id}')

        self.assertEqual(200, response.status_code)

        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'success', bool, True)
        assert_payload_field_type_value(self, data, 'first_name', str,
                                        self.user_1.first_name)
        assert_payload_field_type_value(self, data, 'last_name', str,
                                        self.user_1.last_name)
        assert_payload_field_type_value(self, data, 'email', str,
                                        self.user_1.email)
    def test_endpoint_sadpath_create_drink_missing_title(
            self, mock_get_token_auth_header, mock_verify_decode_jwt):
        mock_get_token_auth_header.return_value = 'manager-token'
        mock_verify_decode_jwt.return_value = {
            'permissions': [
                'delete:drinks', 'get:drinks-detail', 'patch:drinks',
                'post:drinks'
            ]
        }

        payload = self.payload
        del (payload['title'])

        response = self.client.post('/drinks',
                                    json=payload,
                                    content_type='application/json')
        self.assertEqual(400, response.status_code)

        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'success', bool, False)
        assert_payload_field_type_value(self, data, 'error', str,
                                        'details missing')
        assert_payload_field_type_value(
            self, data, 'message', str,
            'your drink content is missing required data')
    def test_happypath_show_contacts(self):
        payload = deepcopy(self.contact_payload)

        response = self.client.get(f'/users/{self.user.id}/contacts')

        self.assertEqual(200, response.status_code)
        data = json.loads(response.data.decode('utf-8'))

        assert_payload_field_type_value(self, data, 'success', bool, True)
        assert_payload_field_type(self, data, 'contacts', list)

        self.assertEqual(3, len(data['contacts']))

        contacts = data['contacts']
        for contact in contacts:
            assert_payload_field_type(self, contact, 'first_name', str)
            assert_payload_field_type(self, contact, 'last_name', str)
            assert_payload_field_type(self, contact, 'group', str)
            assert_payload_field_type(self, contact, 'phone_number', str)
            assert_payload_field_type(self, contact, 'street_address', str)
            assert_payload_field_type(self, contact, 'city', str)
            assert_payload_field_type(self, contact, 'state', str)
            assert_payload_field_type(self, contact, 'zipcode', str)
    def test_endpoint_drinks_happypath_with_drinks(self):
        response = self.client.get('/drinks-detail')
        self.assertEqual(401, response.status_code)

        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'error', int, 401)
        assert_payload_field_type_value(self, data, 'message', str,
                                        'unauthorized')
        assert_payload_field_type_value(self, data, 'success', bool, False)
Exemple #18
0
    def test_sadpath_delete_bad_id_report(self):
        response = self.client.delete(f'/api/v1/reports/9999999')
        self.assertEqual(404, response.status_code)

        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'error', int, 404)
        assert_payload_field_type_value(self, data, 'success', bool, False)
        assert_payload_field_type_value(self, data, 'message', str,
                                        'resource not found')
    def test_endpoint_delete_drink_bad_id(self):
        response = self.client.delete(f'/drinks/{self.bad_drink_id}')

        self.assertEqual(401, response.status_code)
        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'error', int, 401)
        assert_payload_field_type_value(self, data, 'message', str,
                                        'unauthorized')
        assert_payload_field_type_value(self, data, 'success', bool, False)
Exemple #20
0
    def test_happypath_update_user(self):
        payload = deepcopy(self.payload)

        response = self.client.patch(f'/users/{self.user.id}',
                                     json=payload,
                                     content_type='application/json')
        self.assertEqual(200, response.status_code)

        data = json.loads(response.data.decode('utf-8'))

        assert_payload_field_type_value(self, data, 'success', bool, True)
        assert_payload_field_type_value(self, data, 'first_name', str,
                                        self.payload['first_name'])
        assert_payload_field_type_value(self, data, 'last_name', str,
                                        self.payload['last_name'])
        assert_payload_field_type_value(self, data, 'email', str,
                                        self.payload['email'])
Exemple #21
0
    def test_404_error(self):
        response = self.client.get('/lkjasdkj')

        self.assertEqual(response.status_code, 404)
        data = json.loads(response.data.decode('utf-8'))

        assert_payload_field_type_value(self, data, 'message', str,
                                        'resource not found')
        assert_payload_field_type_value(self, data, 'error', int, 404)
        assert_payload_field_type_value(self, data, 'success', bool, False)
Exemple #22
0
    def test_endpoint_badauth_change_drink(self):
        response = self.client.patch('/drinks/1', json=self.payload,
                                     content_type='application/json')
        self.assertEqual(401, response.status_code)

        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'error', int, 401)
        assert_payload_field_type_value(self, data, 'message', str,
                                        'unauthorized')
        assert_payload_field_type_value(self, data, 'success', bool, False)
  def test_sadpath_invalid_contact_id(self):
    contact_id = 99999
    response = self.client.get(f'/users/{self.user.id}/contacts/{contact_id}')

    self.assertEqual(400, response.status_code)

    data = json.loads(response.data.decode('utf-8'))
    assert_payload_field_type_value(self, data, 'success', bool, False)    
    assert_payload_field_type_value(self, data, 'error', int, 400)
    assert_payload_field_type_value(self, data, 'errors', list, [f"contact with id: '{contact_id}' not found"])
Exemple #24
0
    def test_cors(self):
        response = self.client.head('/')

        assert_payload_field_type_value(self, response.headers,
                                        'Access-Control-Allow-Origin', str,
                                        '*')
        assert_payload_field_type_value(self, response.headers,
                                        'Access-Control-Allow-Headers', str,
                                        'Content-Type')
        assert_payload_field_type_value(self, response.headers,
                                        'Access-Control-Allow-Methods', str,
                                        'GET, PATCH, POST, DELETE, OPTIONS')
    def test_endpoint_sadpath_bad_email_user(self):
        response = self.client.get(
                '/api/v1',
                content_type='application/json'
            )
        self.assertEqual(404, response.status_code)

        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'error', int, 404)
        assert_payload_field_type_value(self, data, 'success', bool, False)
        assert_payload_field_type_value(
            self, data, 'message', str, 'resource not found'
        )
Exemple #26
0
    def test_sadpath_blank_name(self):
        payload = deepcopy(self.payload)
        payload['name'] = ''
        response = self.client.post('/api/v1/users',
                                    json=payload,
                                    content_type='application/json')
        self.assertEqual(400, response.status_code)

        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'success', bool, False)
        assert_payload_field_type_value(self, data, 'error', int, 400)
        assert_payload_field_type_value(self, data, 'errors', list,
                                        ["required 'name' parameter is blank"])
Exemple #27
0
    def test_mock_auth_required_bad_perm(self, mock_get_token_auth_header,
                                         mock_verify_decode_jwt):
        mock_get_token_auth_header.return_value = 'token-abc123'
        mock_verify_decode_jwt.return_value = {'permissions': ['get:drink']}

        response = self.client.get('/auth-required',
                                   headers={'Authorization': 'Bearer foo'})
        self.assertEqual(403, response.status_code)
        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'message', str,
                                        'forbidden')
        assert_payload_field_type_value(self, data, 'success', bool, False)
        assert_payload_field_type_value(self, data, 'error', int, 403)
Exemple #28
0
  def test_sadpath_email_is_missing(self):
    payload = deepcopy(self.payload)
    del payload['email']

    response = self.client.post(
      '/login', json=payload,
      content_type='application/json'
    )

    self.assertEqual(400, response.status_code)
    data = json.loads(response.data.decode('utf-8'))
    assert_payload_field_type_value(self, data, 'success', bool, False)
    assert_payload_field_type_value(self, data, 'error', int, 400)
    assert_payload_field_type_value(self, data, 'errors', list, ["required 'email' parameter is missing"])
    def test_endpoint_delete_drink_bad_id(self, mock_get_token_auth_header,
                                          mock_verify_decode_jwt):
        mock_get_token_auth_header.return_value = 'barista-token'
        mock_verify_decode_jwt.return_value = {
            'permissions': ['get:drinks-detail']
        }

        response = self.client.delete(f'/drinks/{self.bad_drink_id}')

        self.assertEqual(403, response.status_code)
        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'error', int, 403)
        assert_payload_field_type_value(self, data, 'message', str,
                                        'forbidden')
        assert_payload_field_type_value(self, data, 'success', bool, False)
Exemple #30
0
    def test_endpoint_badauth_change_drink(
            self, mock_get_token_auth_header, mock_verify_decode_jwt):
        mock_get_token_auth_header.return_value = 'barista-token'
        mock_verify_decode_jwt.return_value = {
            'permissions': ['get:drinks-detail']
        }

        response = self.client.patch('/drinks/1', json=self.payload,
                                     content_type='application/json')
        self.assertEqual(403, response.status_code)

        data = json.loads(response.data.decode('utf-8'))
        assert_payload_field_type_value(self, data, 'error', int, 403)
        assert_payload_field_type_value(self, data, 'message', str,
                                        'forbidden')
        assert_payload_field_type_value(self, data, 'success', bool, False)