Esempio n. 1
0
    def test_get_game_stats_after_creating_2_answers(self):
        # Create 2 answers
        url = "{}{}/user/{}/".format(self.url, self.game['id'], self.user.id)
        answers1 = [0, 2, 2]
        response1 = self.client.post(url, {'answers': answers1}, HTTP_AUTHORIZATION=self.user_token)
        self.assertEqual(202, response1.status_code)
        url = "{}{}/user/{}/".format(self.url, self.game['id'], self.another_user.id)
        answers2 = [0, 1, 0]
        response2 = self.client.post(url, {'answers': answers2}, HTTP_AUTHORIZATION=self.another_token)
        self.assertEqual(202, response2.status_code)

        game_answer1 = response1.data['data']
        self.assertEqual('Upstanding', game_answer1['ending'])
        game_answer2 = response2.data['data']
        self.assertEqual('<equal>', game_answer2['ending'])

        stats = GameSuperuserSerializer(
            Game.objects.get(id=self.game['id'])
        ).data['stats']
        self.assertEqual(stats['num_of_responses'], 2)

        expected_stats = [[2,0,0], [0,1,1], [0,0, 1]]
        self.assertTrue(self.traverse_to_check_stats(answers1, self.game, expected_stats))
        expected_stats = [[2,0,0], [0,1,1], [1,0,0]]
        self.assertTrue(self.traverse_to_check_stats(answers2, self.game, expected_stats))
        expected_end_stats = {
            '<equal>': 1,
            'Bullying': 0,
            'Ignoring': 0,
            'Upstanding': 1
        }
        self.assertEqual(expected_end_stats, stats['answers'][self.game['last_scene']])
Esempio n. 2
0
    def test_create_an_answer_with_too_many_choices(self):
        url = "{}{}/user/{}/".format(self.url, self.game['id'], self.user.id)
        answers = [0, 0, 0, 1, 2, 1]
        response = self.client.post(url, {'answers': answers}, HTTP_AUTHORIZATION=self.user_token)
        self.assertEqual(202, response.status_code)
        stats = GameSuperuserSerializer(
            Game.objects.get(id=self.game['id'])
        ).data['stats']

        self.assertEqual(stats['num_of_responses'], 1)
        count = 0
        for ans in iter(stats['answers'].values()):
            if ans == [1, 0, 0]:
                count += 1
        self.assertEqual(count, 3)

        expected_stats = [[1,0,0], [1,0,0], [1,0,0]]
        self.assertTrue(self.traverse_to_check_stats(answers, self.game, expected_stats))
        expected_end_stats = {
            '<equal>': 1,
            'Bullying': 0,
            'Ignoring': 0,
            'Upstanding': 0
        }
        self.assertEqual(expected_end_stats, stats['answers'][self.game['last_scene']])
Esempio n. 3
0
    def test_delete_a_game(self):
        url = "{}{}/".format(self.url, self.game['id'])
        response = self.client.delete(url, HTTP_AUTHORIZATION=self.superuser_token)
        self.assertEqual(202, response.status_code)

        all_games = GameSuperuserSerializer(Game.objects.all(), many=True).data
        self.assertEqual(0, len(all_games))
        al_scenes = GameSceneSerializer(GameScene.objects.all(), many=True).data
        self.assertEqual(0, len(al_scenes))
Esempio n. 4
0
    def traverse_to_get_scene(self, answers, game):
        game = GameSuperuserSerializer(Game.objects.get(id=game['id'])).data
        scenes = self.populate_game_scenes(game)
        cur_scene = scenes[game['first_scene']]

        for ans in iter(answers):
            if cur_scene['is_end']:
                break

            next_scene_id = cur_scene['choices'][int(ans)]['pathway']
            cur_scene = scenes[next_scene_id]
        return cur_scene
Esempio n. 5
0
    def test_create_a_unfinished_answer(self):
        url = "{}{}/user/{}/".format(self.url, self.game['id'], self.user.id)
        answers = [2, 1]
        response = self.client.post(url, {'answers': answers}, HTTP_AUTHORIZATION=self.user_token)
        self.assertEqual(202, response.status_code)
        stats = GameSuperuserSerializer(
            Game.objects.get(id=self.game['id'])
        ).data['stats']

        self.assertEqual(stats['num_of_responses'], 1)
        expected_stats = [[0,0,1], [0,1,0]]
        self.assertTrue(self.traverse_to_check_stats(answers, self.game, expected_stats))
        self.assertTrue(all(ending == 0 for ending in stats['answers'][self.game['last_scene']].values()))
Esempio n. 6
0
    def traverse_to_get_scenes_in_path(self, answer_data):
        game = GameSuperuserSerializer(Game.objects.get(id=answer_data['game'])).data
        scenes = self.populate_game_scenes_2(answer_data['game'])
        cur_scene = scenes[game['first_scene']]
        answer_scenes = {}

        for ans in iter(answer_data['answers']):
            if cur_scene['is_end'] or not 0 <= int(ans) < len(cur_scene['choices']):
                break

            answer_scenes[cur_scene['id']] = cur_scene
            next_scene_id = cur_scene['choices'][int(ans)]['pathway']
            cur_scene = scenes[next_scene_id]
        return answer_scenes
Esempio n. 7
0
    def test_get_game_stats_after_creating_2_answers_for_game_with_different_threshold(self):
        # Create a game with threshold
        csv_file = "Game_Module_Template_2.csv"
        params = {
            "group_id": str(self.group.id),
            'title': 'mklsad',
            'threshold': 3
        }
        with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), csv_file), 'rb') as upload_file:
            params["file"] = upload_file
            response = self.client.post(
                "{}/game/".format(url_prefix), params,
                HTTP_AUTHORIZATION=self.superuser_token
            )
            self.assertEqual(202, response.status_code)
            game = response.data['data']

        # Create 2 answers
        url = "{}{}/user/{}/".format(self.url, game['id'], self.user.id)
        answers1 = [0, 2, 2, 1]
        response1 = self.client.post(url, {'answers': answers1}, HTTP_AUTHORIZATION=self.user_token)
        self.assertEqual(202, response1.status_code)
        url = "{}{}/user/{}/".format(self.url, game['id'], self.another_user.id)
        answers2 = [0, 1, 0, 1]
        response2 = self.client.post(url, {'answers': answers2}, HTTP_AUTHORIZATION=self.another_token)
        self.assertEqual(202, response2.status_code)

        game_answer1 = response1.data['data']
        self.assertEqual('Upstanding', game_answer1['ending'])
        game_answer2 = response2.data['data']
        self.assertEqual('<equal>', game_answer2['ending'])

        stats = GameSuperuserSerializer(
            Game.objects.get(id=game['id'])
        ).data['stats']
        self.assertEqual(stats['num_of_responses'], 2)

        expected_stats = [[2,0,0], [0,1,1], [0,0, 1], [0, 1, 0]]
        self.assertTrue(self.traverse_to_check_stats(answers1, game, expected_stats))
        expected_stats = [[2,0,0], [0,1,1], [1,0,0], [0, 1, 0]]
        self.assertTrue(self.traverse_to_check_stats(answers2, game, expected_stats))
        expected_end_stats = {
            '<equal>': 1,
            'Hurtful Comment': 0,
            'Ignoring': 0,
            'Upstanding': 1
        }
        self.assertEqual(expected_end_stats, stats['answers'][game['last_scene']])
Esempio n. 8
0
    def test_update_an_unfinished_answer_to_finished(self):
        url = "{}{}/user/{}/".format(self.url, self.game['id'], self.user.id)
        answers = [1, 1]
        self.client.post(url, {'answers': answers}, HTTP_AUTHORIZATION=self.user_token)

        # Update the prev answer
        new_answers = [1, 0, 1, 2]
        response = self.client.post(url, {'answers': new_answers}, HTTP_AUTHORIZATION=self.user_token)
        self.assertEqual(202, response.status_code)
        stats = GameSuperuserSerializer(
            Game.objects.get(id=self.game['id'])
        ).data['stats']

        self.assertEqual(stats['num_of_responses'], 1)
        expected_stats = [[0,1,0], [1,0,0], [0,1,0], [0, 0, 1, 0]]
        self.assertTrue(self.traverse_to_check_stats(new_answers, self.game, expected_stats))
Esempio n. 9
0
    def traverse_to_check_stats(self, answers, game, expected_stats):
        game = GameSuperuserSerializer(Game.objects.get(id=game['id'])).data
        game_stats = game['stats']
        scenes = self.populate_game_scenes(game)
        cur_scene = scenes[game['first_scene']]

        for ans in iter(answers):
            if cur_scene['is_end']:
                break

            if not expected_stats:
                return False

            if game_stats['answers'][str(cur_scene['id'])] != expected_stats.pop(0):
                return False

            next_scene_id = cur_scene['choices'][int(ans)]['pathway']
            cur_scene = scenes[next_scene_id]
        return True
Esempio n. 10
0
    def test_delete_an_answer(self):
        url = "{}{}/user/{}/".format(self.url, self.game['id'], self.user.id)
        answers = [1, 1, 1, 1]
        self.client.post(url, {'answers': answers}, HTTP_AUTHORIZATION=self.user_token)
        response = self.client.delete(url, HTTP_AUTHORIZATION=self.user_token)
        self.assertEqual(202, response.status_code)

        stats = GameSuperuserSerializer(
            Game.objects.get(id=self.game['id'])
        ).data['stats']

        self.assertEqual(stats['num_of_responses'], 0)

        # Ensure that all other answers are empty in stats
        count = 0
        for val in iter(stats['answers'].values()):
            if all(element==0 for element in val):
                count += 1
        self.assertEqual(len(stats['answers'].keys())-1, count)
Esempio n. 11
0
    def test_create_an_answer(self):
        url = "{}{}/user/{}/".format(self.url, self.game['id'], self.user.id)
        answers = [2, 1, 1]
        response = self.client.post(url, {'answers': answers}, HTTP_AUTHORIZATION=self.user_token)
        self.assertEqual(202, response.status_code)
        game_answer = response.data['data']
        self.assertEqual('Bullying', game_answer['ending'])

        stats = GameSuperuserSerializer(
            Game.objects.get(id=self.game['id'])
        ).data['stats']
        self.assertEqual(stats['num_of_responses'], 1)
        expected_stats = [[0,0,1], [0,1,0], [0,1,0]]
        self.assertTrue(self.traverse_to_check_stats(answers, self.game, expected_stats))
        expected_end_stats = {
            '<equal>': 0,
            'Bullying': 1,
            'Ignoring': 0,
            'Upstanding': 0
        }
        self.assertEqual(expected_end_stats, stats['answers'][self.game['last_scene']])
Esempio n. 12
0
    def test_update_a_finished_answer_to_unfinished(self):
        url = "{}{}/user/{}/".format(self.url, self.game['id'], self.user.id)
        answers = [1, 1, 1, 1]
        self.client.post(url, {'answers': answers}, HTTP_AUTHORIZATION=self.user_token)

        # Update the prev answer
        new_answers = [1, 0]
        response = self.client.post(url, {'answers': new_answers}, HTTP_AUTHORIZATION=self.user_token)
        self.assertEqual(202, response.status_code)
        stats = GameSuperuserSerializer(
            Game.objects.get(id=self.game['id'])
        ).data['stats']

        self.assertEqual(stats['num_of_responses'], 1)
        expected_stats = [[0,1,0], [1,0,0]]
        self.assertTrue(self.traverse_to_check_stats(new_answers, self.game, expected_stats))

        # Ensure that all other answers are empty in stats
        count = 0
        for val in iter(stats['answers'].values()):
            if all(element==0 for element in val):
                count += 1
        self.assertEqual(3, count)