def test_success(self):
        deck = factories.DeckFactory(
            name='test_deck',
            is_ask_mode_enabled=True,
            evaluation_period_status=card_module.EVALUATION_PERIOD_STATUS_OPEN)
        self.db.session.add(deck)
        question = factories.CardFactory(name='question')
        self.db.session.add(question)
        deck.cards.append(question)

        answer1 = factories.CardFactory(name='answer1')
        self.db.session.add(answer1)
        deck.cards.append(answer1)

        answer2 = factories.CardFactory(name='answer2')
        self.db.session.add(answer2)
        deck.cards.append(answer2)

        self.db.session.commit()

        data = {'card_id': answer1.id}

        response = self.client.post('/api/v1/deck/revoke_card_from_deck',
                                    data=json.dumps(data),
                                    follow_redirects=True,
                                    content_type='application/json')
        self.assertEqual(response.status, '200 OK')
        deck = Card.query.get(deck.id)
        self.assertEqual(len(deck.cards), 2)
        self.assertEqual(deck.cards[0].id, question.id)
        self.assertEqual(deck.cards[1].id, answer2.id)
示例#2
0
    def test_for_specific_user_true(self):
        from lib.models import card as card_module
        self.creator = User(username='******')

        self.card = factories.CardFactory(type=Card.DECK,
                                          is_ask_mode_enabled=True,
                                          creator=self.creator)

        self.viewer = factories.UserFactory()
        self.card.views.append(self.viewer)
        self.card.comments.append(factories.Comment(user=self.viewer))

        urc = factories.UserRoleCard(card=self.card,
                                     user=self.viewer,
                                     prize=56)

        self.db.session.add(self.card)
        self.db.session.commit()

        self.call_target(by_user=self.viewer)

        self.assertEqual(self.result['views_count'], 1)
        self.assertEqual(self.result['viewed_by_me'], True)
        self.assertEqual(self.result['commented_by_me'], True)
        self.assertEqual(self.result['won_by_me'], True)
    def test_succcess(self):
        card_id = 'card_id'
        card_name = 'card_name'
        card = factories.CardFactory(id=card_id,
                                     name='card_name',
                                     creator=self.user,
                                     description='description')
        tag = factories.Tag(name="tag1")
        card.tags.append(tag)
        self.db.session.commit()

        result = self.call_target(card_id=card_id)
        self.assertEqual(result.status, '200 OK')

        card = factories.CardFactory.get(card_id)
        deck = card.parent

        self.assertEqual(
            result, factories.JsonResponseFactory.build(data=deck.to_dict()))

        self.assertEqual(deck.type, Card.DECK)
        self.assertEqual(deck.name, card_name)
        self.assertEqual(deck.description, 'description')
        self.assertEqual(len(deck.tags), 1)
        self.assertEqual(deck.tags[0].name, 'tag1')
示例#4
0
    def test_givers_and_is_answer_flag(self):
        deck = factories.CardFactory(type=Card.DECK, is_ask_mode_enabled=True)
        self.db.session.add(deck)
        self.db.session.commit()

        question_creator = User(username='******')
        self.db.session.add(question_creator)
        question = Card(type=Card.TEXT,
                        parent_id=deck.id,
                        position=0,
                        is_answer=False,
                        creator=question_creator)
        self.db.session.add(question)

        giver1 = User(username='******')
        self.db.session.add(giver1)

        answer = Card(type=Card.TEXT,
                      parent_id=deck.id,
                      creator=giver1,
                      position=1,
                      is_answer=True)
        self.db.session.add(answer)

        answer1 = Card(type=Card.TEXT,
                       parent_id=deck.id,
                       creator=giver1,
                       position=2,
                       is_answer=True)
        self.db.session.add(answer1)

        question1 = Card(type=Card.TEXT,
                         parent_id=deck.id,
                         position=3,
                         is_answer=False,
                         creator=question_creator)
        self.db.session.add(question1)

        self.db.session.commit()

        res = deck.to_dict()
        self.assertEqual(len(res['givers']), 1)
        self.assertEqual(res['givers'][0]['user_id'], giver1.id)

        #check if children elements has correct flag  is_answer
        children = res['children']
        self.assertEqual(len(children), 4)

        self.assertEqual(children[0]['id'], question.id)
        self.assertEqual(children[0]['is_answer'], False)

        self.assertEqual(children[1]['id'], answer.id)
        self.assertEqual(children[1]['is_answer'], True)

        self.assertEqual(children[2]['id'], answer1.id)
        self.assertEqual(children[2]['is_answer'], True)

        self.assertEqual(children[3]['id'], question1.id)
        self.assertEqual(children[3]['is_answer'], False)
示例#5
0
    def test_tags_field(self):
        tag = factories.Tag(name='tag1')
        card = factories.CardFactory(tags=[tag])
        self.db.session.commit()

        res = card.to_dict()
        self.assertEqual(len(res['tags']), 1)
        self.assertEqual(res['tags'][0], 'tag1')
示例#6
0
    def test_card_should_not_published(self):
        deck = factories.DeckFactory(published=True, creator=self.user)
        card1 = factories.CardFactory(parent=deck)
        card2 = factories.CardFactory(parent=deck)
        self.db.session.commit()

        self.assertEqual(card1.position, 0)
        self.assertEqual(card2.position, 1)

        result = self.call_target(card_id=card1.id, position=1)
        self.assertEqual(
            result,
            factories.JsonResponseWithResultStatusFactory.build(
                data={
                    'result': 'error',
                    'message':
                    u'Card deck is published. you can not change order'
                }))
示例#7
0
    def test_image_scale_field(self):
        self.card = factories.CardFactory(type=Card.IMAGE, scale=4)
        self.db.session.commit()

        self.call_target()
        self.assert_result()

        self.assertEqual(self.result['scale'], 4)
        self.assertEqual(self.result['image_scale'], 4)
 def test_succcess(self):
     card = factories.CardFactory(creator=self.user)
     self.db.session.commit()
     result = self.call_target()
     self.assertEqual(result.status, '200 OK')
     data = flask.json.loads(result.data)
     cards = data['created']
     self.assertEqual(len(cards), 1)
     self.assertEqual(cards[0]['id'], card.id)
示例#9
0
    def test_simple_fields(self):
        from lib.models import card as card_module
        self.creator = User(username='******')

        self.card = factories.CardFactory(type=Card.DECK,
                                          is_ask_mode_enabled=True,
                                          creator=self.creator)
        eastern = timezone('US/Eastern')

        self.card.evaluation_period_status = card_module.EVALUATION_PERIOD_STATUS_OPEN
        self.card.distribution_rule = card_module.DISTRIBUTION_RULE_SPLIT_EVENLY
        self.card.distribution_for = 10
        self.card.evaluation_start_dt = datetime(2016,
                                                 11,
                                                 28,
                                                 9,
                                                 51,
                                                 38,
                                                 tzinfo=eastern)
        self.card.evaluation_end_dt = datetime(2016,
                                               11,
                                               29,
                                               9,
                                               51,
                                               38,
                                               tzinfo=eastern)
        self.card.answer_visibility = card_module.ANSWER_VISIBILITY_ONLY_ASKERS
        self.card.scale = 3
        self.card.original_prize_pool = 123
        self.viewer = factories.UserFactory()
        self.card.views.append(self.viewer)

        self.db.session.add(self.card)
        self.db.session.commit()

        self.call_target()
        self.assert_result()

        self.joined_users = [self.creator]

        self.assertEqual(self.result['evaluation_period_status'],
                         card_module.EVALUATION_PERIOD_STATUS_OPEN)
        self.assertEqual(self.result['distribution_rule'],
                         card_module.DISTRIBUTION_RULE_SPLIT_EVENLY)
        self.assertEqual(self.result['distribution_for'], 10)
        self.assertEqual(self.result['evaluation_start_dt'],
                         datetime(2016, 11, 28, 9, 51, 38, tzinfo=eastern))
        self.assertEqual(self.result['evaluation_end_dt'],
                         datetime(2016, 11, 29, 9, 51, 38, tzinfo=eastern))
        self.assertEqual(self.result['answer_visibility'],
                         card_module.ANSWER_VISIBILITY_ONLY_ASKERS)
        self.assertEqual(self.result['creator_info']['user_id'],
                         self.creator.id)
        self.assertEqual(self.result['scale'], 3)
        self.assertEqual(self.result['original_prize_pool'], 123)
        self.assertEqual(self.result['views_count'], 1)
示例#10
0
    def test_succcess(self):
        card = factories.CardFactory(id="card")
        self.db.session.commit()
        result = self.call_target(card_id="card")
        self.assertEqual(result, factories.JsonResponseFactory.build())

        card = factories.CardFactory.get("card")
        self.assertEqual(card.views_count, 1)
        self.assertEqual(len(card.views), 1)
        self.assertEqual(card.views[0].id, self.user.id)
示例#11
0
    def test_succcess(self):
        deck = factories.DeckFactory(creator=self.user)
        card1 = factories.CardFactory(parent=deck)
        card2 = factories.CardFactory(parent=deck)
        card3 = factories.CardFactory(parent=deck)
        self.db.session.commit()

        self.assertEqual(card1.position, 0)
        self.assertEqual(card2.position, 1)
        self.assertEqual(card3.position, 2)

        result = self.call_target(card_id=card1.id, position=1)
        self.assertEqual(result,
                         factories.JsonResponseWithResultStatusFactory.build())

        card1 = factories.CardFactory.get(card1.id)
        self.assertEqual(card1.position, 1)
        self.assertEqual(card2.position, 0)
        self.assertEqual(card3.position, 2)
示例#12
0
 def test_delete_card_with_reference_to_user_role_card(self):
     user_role_card = factories.UserRoleCard(card=factories.CardFactory(creator=self.user))
     self.db.session.commit()
     card = user_role_card.card
     data = {
         'card_ids': [card.id]
     }
     response = self.client.post('/api/v1/deck/delete_cards', data=flask.json.dumps(data), content_type='application/json')
     self.assertEqual(response.status, '200 OK')
     card = Card.query.get(card.id)
     self.assertIsNone(card)
示例#13
0
    def test_change_order_for_drafts(self):
        card1 = factories.CardFactory(creator=self.user, position=0)
        card2 = factories.CardFactory(creator=self.user, position=1)
        card3 = factories.CardFactory(creator=self.user, position=2)
        self.db.session.commit()

        self.assertEqual(card1.position, 0)
        self.assertEqual(card2.position, 1)
        self.assertEqual(card3.position, 2)

        result = self.call_target(card_id=card1.id, position=1)
        self.assertEqual(result,
                         factories.JsonResponseWithResultStatusFactory.build())

        card1 = factories.CardFactory.get(card1.id)
        card2 = factories.CardFactory.get(card2.id)
        card3 = factories.CardFactory.get(card3.id)
        self.assertEqual(card1.position, 1)
        self.assertEqual(card2.position, 0)
        self.assertEqual(card3.position, 2)
示例#14
0
    def test_succcess(self):
        card_id = 'card_id'
        card = factories.CardFactory(id=card_id,
                                     name='card_name',
                                     creator=self.user)
        self.db.session.commit()
        result = self.call_target(card_id=card_id)
        self.assertEqual(result.status, '200 OK')

        data = json.loads(result.data)
        new_card_id = data['id']

        card = factories.CardFactory.get(card_id)
        new_card = factories.CardFactory.get(new_card_id)
        self.assertEqual(card.name, new_card.name)
示例#15
0
    def test_wins(self):
        ask = factories.CardFactory()
        self.db.session.add(ask)
        urc = factories.UserRoleCard(card=ask, user=self.user, role_id=card_role.CardRole.GIVER, prize=10)
        self.db.session.add(urc)
        self.db.session.commit()

        self.data['fields'] = 'wins'
        response = self.call_target()

        self.assertEqual(response.status, '200 OK')
        data = flask.json.loads(response.data)

        asks = data['wins']
        self.assertEqual(len(asks), 1)
        self.assertEqual(asks[0]['id'], ask.id)
示例#16
0
    def test_asks(self):
        card = factories.CardFactory()
        self.db.session.add(card)
        urc = factories.UserRoleCard(card=card, user=self.user, role_id=card_role.CardRole.JOINED)
        self.db.session.add(urc)
        self.db.session.commit()

        self.data['fields'] = 'asks'
        response = self.call_target()

        self.assertEqual(response.status, '200 OK')
        data = flask.json.loads(response.data)

        asks = data['asks']
        self.assertEqual(len(asks), 1)
        self.assertEqual(asks[0]['id'], card.id)
示例#17
0
    def test_published(self):
        '''Get all card published by user'''
        user = factories.UserFactory()
        self.db.session.add(user)
        card = factories.CardFactory(user_id=user.id, published=True, creator=user)
        self.db.session.add(card)
        self.db.session.commit()

        self.data['fields'] = 'published'
        self.data['user_id'] = user.id
        response = self.call_target()

        self.assertEqual(response.status, '200 OK')
        data = flask.json.loads(response.data)

        cards = data['published']
        self.assertEqual(len(cards), 1)
        self.assertEqual(cards[0]['id'], card.id)
示例#18
0
    def test_for_specific_user_false(self):
        from lib.models import card as card_module
        self.creator = User(username='******')
        self.card = factories.CardFactory(type=Card.DECK,
                                          is_ask_mode_enabled=True,
                                          creator=self.creator)
        self.viewer = factories.UserFactory()

        self.db.session.commit()

        self.call_target(by_user=self.viewer)
        self.assert_result()

        self.joined_users = [self.creator]

        self.assertEqual(self.result['views_count'], 0)
        self.assertEqual(self.result['viewed_by_me'], False)
        self.assertEqual(self.result['commented_by_me'], False)
        self.assertEqual(self.result['won_by_me'], False)
示例#19
0
    def call_target(self, by_user=None):
        if self.card is None:
            self.card = factories.CardFactory(type=Card.DECK,
                                              is_ask_mode_enabled=True)
            if self.creator:
                if self.creator.id is None:
                    self.db.session.add(self.creator)
                    self.db.session.commit()

                self.card.creator = self.creator
            if self.evaluation_period_status is not None:
                self.card.evaluation_period_status = self.evaluation_period_status
            self.db.session.add(self.card)
            self.db.session.commit()

        if self.creator is not None:
            urc = UserRoleCard(user_id=self.creator.id,
                               role_id=CardRole.JOINED,
                               card_id=self.card.id)
            self.db.session.add(urc)
            self.db.session.commit()

        if self.joined_user1_name is not None:
            self.joined_user_id1 = User(username=self.joined_user1_name)
            self.db.session.add(self.joined_user_id1)
            self.db.session.commit()

        if self.joined_user_id1 is not None:
            if self.joined_user_id1.id is None:
                self.db.session.add(self.joined_user_id1)
                self.db.session.commit()
            urc = UserRoleCard(user_id=self.joined_user_id1.id,
                               role_id=CardRole.JOINED,
                               card_id=self.card.id)
            if self.joined_user_id1_contribution is not None:
                urc.contribution = self.joined_user_id1_contribution
            self.db.session.add(urc)
            self.db.session.commit()

        res = self.card.to_dict(user=by_user)
        self.result = res
        self.create_expected()
        return self.result
示例#20
0
    def test_deck_deck_card_structure(self):
        deck = factories.DeckFactory(id="deck", is_ask_mode_enabled=True)
        container = factories.DeckFactory(id='container',
                                          parent=deck,
                                          is_ask_mode_enabled=False)
        factories.CardFactory(id='card', parent=container)
        self.db.session.commit()

        res = deck.to_dict()
        self.assertEqual(res['id'], 'deck')
        self.assertEqual(len(res['children']), 1)

        c = res['children'][0]
        self.assertEqual(c['id'], 'container')
        self.assertEqual(len(c['children']), 1)

        ca = c['children'][0]
        self.assertEqual(ca['id'], 'card')
        self.assertNotIn('children', ca)
示例#21
0
    def test_success(self):
        user = factories.UserFactory(silver_points=39, gold_points=44)
        card = factories.CardFactory(creator=user, likes=4)
        self.db.session.commit()
        response = self.call_target(user_id=user.id)

        res = flask.json.loads(response.data)

        self.assertEqual(res['user_info']['user_id'], user.id)
        self.assertEqual(len(res['cards']), 1)
        self.assertEqual(res['cards'][0]['id'], card.id)

        stats = res['stats']

        self.assertEqual(stats['total_followers'], 0)
        self.assertEqual(stats['total_followings'], 0)
        self.assertEqual(stats['total_likes'], 4)
        self.assertEqual(stats['total_shared'], 113)
        self.assertEqual(stats['total_points'], {'silver': 39, 'gold': 44})
示例#22
0
    def test_likes(self):
        '''Get all card liked by user'''
        card = factories.CardFactory()
        self.db.session.add(card)
        user = factories.UserFactory()
        self.db.session.add(user)
        like = factories.CardLikesFactory(card=card, user=user)
        self.db.session.add(like)
        self.db.session.commit()

        self.data['fields'] = 'likes'
        self.data['user_id'] = user.id
        response = self.call_target()

        self.assertEqual(response.status, '200 OK')
        data = flask.json.loads(response.data)

        cards = data['likes']
        self.assertEqual(len(cards), 1)
        self.assertEqual(cards[0]['id'], card.id)
示例#23
0
    def test_create_ask_from_single_card(self):
        card = factories.CardFactory(name="card_name")
        self.db.session.commit()

        self.call_target(data=dict(deck_id=card.id, is_ask_mode_enabled=True))
        # TO DO check response
        card = factories.CardFactory.get(card.id)
        self.assertEqual(card.type, Card.TEXT)
        self.assertEqual(card.is_ask_mode_enabled, False)
        self.assertEqual(card.name, "card_name")

        container = card.parent

        self.assertEqual(container.type, Card.DECK)
        self.assertEqual(container.name, "card_name")
        self.assertEqual(container.is_ask_mode_enabled, False)

        ask_mode_deck = container.parent

        self.assertEqual(ask_mode_deck.type, Card.DECK)
        self.assertEqual(ask_mode_deck.is_ask_mode_enabled, True)
示例#24
0
    def test_enable_ask_mode_for_deck(self):
        deck = factories.DeckFactory(name="deck_name")
        card = factories.CardFactory(parent=deck, name="card_name")
        self.call_target(data=dict(deck_id=deck.id, is_ask_mode_enabled=True))

        # TO DO check response
        card = factories.CardFactory.get(card.id)
        self.assertEqual(card.type, Card.TEXT)
        self.assertEqual(card.is_ask_mode_enabled, False)
        self.assertEqual(card.name, "card_name")

        container = card.parent

        self.assertEqual(container.type, Card.DECK)
        self.assertEqual(container.name, "deck_name")
        self.assertEqual(container.is_ask_mode_enabled, False)

        ask_mode_deck = container.parent

        self.assertEqual(ask_mode_deck.type, Card.DECK)
        self.assertEqual(ask_mode_deck.name, "deck_name")
        self.assertEqual(ask_mode_deck.is_ask_mode_enabled, True)
示例#25
0
 def test_points_cannot_be_less_than_0(self):
     try:
         factories.CardFactory(silver_points=-1, gold_points=-1)
         self.fail('Value error shoulb be thrown')
     except ValueError:
         pass
示例#26
0
 def test_many_questions(self):
     self.questions = [factories.CardFactory(), factories.CardFactory()]
     self.call_target()
     self.assert_output()