Esempio n. 1
0
class PartyTestCase(TestCaseWithHttp):
    def setUp(self):
        super().setUp()

        self.user = User.objects.create_user(username='******',
                                             email='*****@*****.**',
                                             password='******')

        self.party1 = Party(
            name="party 1 name",
            type=int(PartyType.Private),
            location="party 1 location",
            leader=self.user,
        )
        self.party1.save()
        self.state1 = self.party1.get_state()

        self.party2 = Party(
            name="party 2 name",
            type=int(PartyType.InGroup),
            location="party 2 location",
            leader=self.user,
        )
        self.party2.save()
        self.state2 = self.party2.get_state()

    def login(self):
        super().login(email='*****@*****.**', password='******')

    def test_not_allowed(self):
        self.assertEqual(self.put('/api/party/', {}).status_code, 405)
        self.assertEqual(self.delete('/api/party/').status_code, 405)

        self.assertEqual(self.post('/api/party/0/', {}).status_code, 405)
        self.assertEqual(self.put('/api/party/0/', {}).status_code, 405)

    def test_unauthenticated(self):
        self.assertEqual(self.get('/api/party/').status_code, 403)
        self.assertEqual(self.post('/api/party/', {}).status_code, 403)

        self.assertEqual(self.get('/api/party/0/').status_code, 403)
        self.assertEqual(self.delete('/api/party/0/').status_code, 403)

        self.login()
        self.assertEqual(self.get('/api/party/').status_code, 200)
        self.logout()
        self.assertEqual(self.get('/api/party/').status_code, 403)

    def test_not_found(self):
        self.login()
        self.assertEqual(self.get('/api/party/0/').status_code, 404)
        self.assertEqual(self.delete('/api/party/0/').status_code, 404)

    def test_get_party_state(self):
        state1 = self.state1
        self.assertIsNotNone(state1)
        state2 = self.state2
        self.assertIsNotNone(state2)

    def test_get_party(self):
        self.login()

        resp = self.get('/api/party/')
        self.assertEqual(resp.status_code, 200)

        resp_json = resp.json()
        self.assertEqual(len(resp_json), 2)
        self.assertListEqual(resp_json,
                             [self.party1.as_dict(),
                              self.party2.as_dict()])

    def test_post_party(self):
        self.login()

        new_party = {
            'name': 'new party name',
            'type': PartyType.Private,
            'location': 'new party location',
        }

        resp = self.post('/api/party/', new_party)
        self.assertEqual(resp.status_code, 200)

        resp_json = resp.json()
        self.assertEqual(resp_json['name'], new_party['name'])
        self.assertEqual(resp_json['type'], new_party['type'])
        self.assertEqual(resp_json['location'], new_party['location'])
        self.assertEqual(resp_json['leader_id'], self.user.id)

        id = resp_json['id']
        party = Party.objects.get(id=id)
        self.assertEqual(party.name, new_party['name'])
        self.assertEqual(party.type, new_party['type'])
        self.assertEqual(party.location, new_party['location'])
        self.assertEqual(party.leader.id, self.user.id)

    def test_post_party_bad_request(self):
        self.login()

        resp = self.post('/api/party/', {})
        self.assertEqual(resp.status_code, 400)

    def test_delete_party(self):
        party = Party(
            name="new party name",
            type=int(PartyType.Private),
            location="new party location",
            leader=self.user,
        )
        party.save()
        id = party.id

        self.assertIsNotNone(cache.get('party:{}'.format(id)))
        state = party.get_state()
        self.assertIsNotNone(state)

        self.login()

        resp = self.delete('/api/party/{}/'.format(id))
        self.assertEqual(resp.status_code, 200)

        party = Party.objects.filter(id=id)
        self.assertTrue(not party.exists())
        self.assertIsNone(cache.get('party:{}'.format(id)))

        user = User.objects.create_user(username="******",
                                        email="*****@*****.**",
                                        password="******")
        user.save()
        party = Party(name="party",
                      type=int(PartyType.InGroup),
                      location="somewhere",
                      leader=user)
        party.save()

        resp = self.delete('/api/party/{}/'.format(party.id))
        self.assertEqual(resp.status_code, 403)

        state = party.get_state()
        state.delete()
        party.delete()

    def test_delete_party_with_invalid_state(self):
        party = Party(
            name="new party name",
            type=int(PartyType.Private),
            location="new party location",
            leader=self.user,
        )
        party.save()
        id = party.id

        self.login()

        party.get_state().delete()
        resp = self.delete('/api/party/{}/'.format(id))
        self.assertEqual(resp.status_code, 200)

    def test_get_party_detail(self):
        self.login()

        resp = self.get('/api/party/{}/'.format(self.party1.id))
        self.assertEqual(resp.status_code, 200)

        resp_json = resp.json()
        self.assertDictEqual(resp_json, self.party1.as_dict())

    def test_party_restaurant_field(self):
        self.assertEqual(self.party1.as_dict()['restaurant_id'], None)

        restaurant = Restaurant(name="Rustaurant")
        restaurant.save()
        self.party1.restaurant = restaurant
        self.party1.save()

        self.assertEqual(self.party1.as_dict()['restaurant_id'], restaurant.id)
Esempio n. 2
0
class UtilTestCase(TestCaseWithCache):
    def setUp(self):
        super().setUp()

        self.user = User.objects.create_user(
            email='*****@*****.**',
            password='******',
            username='******',
        )
        self.party = Party(
            name="party 1 name",
            type=int(PartyType.Private),
            location="party 1 location",
            leader=self.user,
        )
        self.party.save()
        self.state = self.party.get_state()

        cache.set('user-party:{}'.format(self.user.id), self.party.id)

        self.client.login(email=self.user.email, password='******')

    def test_get_party(self):
        (party, state) = get_party(self.state.id)

        self.assertEqual(party.as_dict(), self.party.as_dict())
        self.assertEqual(state.as_dict(), self.state.as_dict())

    def test_get_party_of_user(self):
        (party, state) = get_party_of_user(self.user.id)

        self.assertEqual(party.as_dict(), self.party.as_dict())
        self.assertEqual(state.as_dict(), self.state.as_dict())

    def test_get_party_invalid(self):
        with self.assertRaises(InvalidPartyError):
            get_party(0)

    def test_get_party_of_user_not_joined(self):
        cache.delete('user-party:{}'.format(self.user.id))

        with self.assertRaises(NotJoinedError):
            get_party_of_user(self.user.id)

    def test_get_party_of_user_invalid(self):
        cache.set('user-party:{}'.format(self.user.id), 0)

        with self.assertRaises(InvalidPartyError):
            get_party_of_user(self.user.id)

    def test_delete_invalid_party(self):
        self.state.delete()
        Party.objects.get(id=self.party.id)
        self.assertIsNone(PartyState.get(self.state.id))

        with self.assertRaises(InvalidPartyError):
            get_party(self.party.id)
        with self.assertRaises(Party.DoesNotExist):
            Party.objects.get(id=self.party.id)

    def test_delete_invalid_party_state(self):
        self.party.delete()
        with self.assertRaises(Party.DoesNotExist):
            Party.objects.get(id=self.party.id)
        self.assertIsNotNone(PartyState.get(self.state.id))

        with self.assertRaises(InvalidPartyError):
            get_party(self.state.id)

        self.assertIsNone(PartyState.get(self.state.id))