コード例 #1
0
    def test_send_link_messages(self):
        """test sending link messages"""
        MOCKCLIENTS = TESTCLIENTS.copy()
        MOCKMESSAGES = TESTMESSAGES.copy()
        MOCKSESSION = UnifiedAlchemyMagicMock()
        TESTMESSAGE = {
            USER:'******',
            ID:'003',
            MESSAGE:'This is a link https://www.google.com/',
        }
        EXPECTEDMESSAGES = [
            MOCKMESSAGES[0],
            MOCKMESSAGES[1],
            MOCKMESSAGES[2],
            {
                USER:'******',
                MESSAGE:("This is a link <a href='https://www.google.com/' " +
                "target='_blank'>https://www.google.com/</a> "),
                TIMESTAMP: datetime.now(TIME_ZONE).strftime("%H:%M %m/%d/%y")
            }
        ]

        with mock.patch("app.socketio.emit", mock_emit):
            with mock.patch("app.clients", MOCKCLIENTS):
                with mock.patch("app.messages", MOCKMESSAGES):
                    with mock.patch("app.db.session", MOCKSESSION):
                        fill_mock_db(MOCKSESSION)
                        response =on_send_message(TESTMESSAGE)
                        self.assertTrue(response[RESPONSE] == 'messages updated')
                        self.assertEqual(response[DATA][MESSAGES], EXPECTEDMESSAGES)
                        MOCKDB = MOCKSESSION.query(models.Messages).all()
                        for i in range(0,len(MOCKDB)):
                            self.assertEqual(MOCKDB[i].name, EXPECTEDMESSAGES[i][USER])
                            self.assertEqual(MOCKDB[i].message, EXPECTEDMESSAGES[i][MESSAGE])
                            self.assertEqual(MOCKDB[i].time, EXPECTEDMESSAGES[i][TIMESTAMP])
コード例 #2
0
    def test_calls_my_method(self):
        """ ExampleClass module calls my_method twice """
        # with \
        #         patch('sqlalchemy.or_') as m_or_,\
        #         patch('sqlalchemy.and_') as m_and_,\
        #         patch('sqlalchemy.func') as m_func,\
        #         patch('sqlalchemy.not_') as m_not_:
        from airflow_maintenance_dags.db_cleanup.airflow_db_cleanup \
            import _get_entries_to_delete

        # mock the data:
        # TODO: this is non-functional example copied from
        # https://pypi.org/project/alchemy-mock/
        session = UnifiedAlchemyMagicMock(data=[
            ([
                mock.call.query(DagRun),
                mock.call.filter(DagRun.foo == 5, DagRun.bar > 10)
            ], [DagRun(foo=5, bar=11)]),
            ([
                mock.call.query(DagRun),
                mock.call.filter(DagRun.note == 'hello world')
            ], [DagRun(note='hello world')]),
            ([
                mock.call.query(DAG),
                mock.call.filter(DagRun.foo == 5, DagRun.bar > 10)
            ], [DAG(foo=5, bar=17)]),
        ])
        query = session.query(DagRun).options(load_only(DagRun.execution_date))

        result = _get_entries_to_delete(query, DagRun, False,
                                        DagRun.execution_date, DagRun.dag_id,
                                        "2019-07-29", ['dag_ignore_list'])
        import pdb
        pdb.set_trace()
        self.assertEqual(query, False)
コード例 #3
0
    def test_emit_cards_success(self, mock_flash):
        session = UnifiedAlchemyMagicMock()
        for test in self.success_test_params:
            mock_flash.request.sid = test[KEY_INPUT][KEY_SID]

            with mock.patch("models.DB.session", session):
                session.query(
                    models.Flashcards).all.return_value = self.mocked_cards()
                with mock.patch("flask_socketio.SocketIO.emit",
                                self.mock_emit):
                    print(app.emit_flashcards(test[KEY_INPUT][KEY_DATA]))
コード例 #4
0
 def test_database_values(self):
     """ Mocked database initalization """
     session = UnifiedAlchemyMagicMock()
     session.add(
         models.ChatHistory(user_name="mike",
                            pic_url="https://google.com",
                            message="hi"))
     query = session.query(models.ChatHistory).first()
     self.assertEqual(query.user_name, "mike")
     self.assertEqual(query.pic_url, "https://google.com")
     self.assertEqual(query.message, "hi")
コード例 #5
0
    def test_new_room_creation_success(self, mock_flash):
        session = UnifiedAlchemyMagicMock()
        for test in self.success_test_params:
            mock_flash.request.sid = test[KEY_INPUT][KEY_SID]

            with mock.patch("models.DB.session", session):
                print("Rooms:", session.query(models.JoinedRooms).count())
                session.add(
                    models.CurrentConnections(test[KEY_INPUT][KEY_SID], 1))

                session.commit()
                with mock.patch("flask_socketio.SocketIO.emit",
                                self.mock_emit):
                    app.on_new_room_creation(test[KEY_INPUT][KEY_DATA])

                response = {
                    KEY_JOINED: session.query(models.JoinedRooms).count(),
                    KEY_ROOMS: session.query(models.Rooms).count()
                }
                expected = test[KEY_EXPECTED]
                self.assertDictEqual(response, expected)
コード例 #6
0
class TestCrud(TestCase):
    def setUp(self):
        self.sess = UnifiedAlchemyMagicMock()

    def test_simple_create(self):
        mock_qs = views_schema.Queryset(name="foobar",
                                        loa="priogrid_month",
                                        operations=[])
        crud.create_queryset(self.sess, mock_qs)
        result = self.sess.query(models.Queryset).all()
        self.assertEqual(len(result), 1)

    def test_create(self):
        queryset = views_schema.Queryset(
            name="my_queryset",
            loa="country_month",
            themes=["my_theme", "my_other_theme"],
            operations=[
                [
                    views_schema.Operation(
                        namespace="trf",
                        name="operation.my_transform",
                        arguments=[10],
                    ),
                    views_schema.Operation(namespace="base",
                                           name="priogrid_month.my_variable",
                                           arguments=["max"])
                ],
                [
                    views_schema.Operation(namespace="base",
                                           name="country_month.my_variable",
                                           arguments=["values"])
                ],
            ])

        crud.create_queryset(self.sess, queryset)
        result = self.sess.query(models.Queryset).all()
        self.assertEqual(len(result), 1)
コード例 #7
0
    def test_send_bot_messages_with_known_results(self):
        """test sending simple bot messages"""
        BOT_COMMANDS = ['!! about', '!! help', '!! fakeCommand']
        BOT_RESPONSES = [
            ('Hi, I am BobbyBot. I am a pretty fun guy. If there is something you need from me '+
            'let me know. To find out what I am capable of type !! help'),
            ('!! about - learn about me<br>!! help - shows this screen<br>!! funtranslate '+
            '{message} - translate message to {language}<br>!! flip - flip a coin<br>!! '+
            'bitcoin - I will tell you bitcoins price'),
            "I don't know how to do that"
        ]

        for bot in range(0,len(BOT_COMMANDS)):
            MOCKCLIENTS = TESTCLIENTS.copy()
            MOCKMESSAGES = TESTMESSAGES.copy()
            MOCKSESSION = UnifiedAlchemyMagicMock()
            TESTMESSAGE = {
                USER:'******',
                ID:'003',
                MESSAGE:BOT_COMMANDS[bot],
            }
            EXPECTEDMESSAGES = [
                MOCKMESSAGES[0],
                MOCKMESSAGES[1],
                MOCKMESSAGES[2],
                {
                    USER:'******',
                    MESSAGE:BOT_COMMANDS[bot] + ' ',
                    TIMESTAMP: datetime.now(TIME_ZONE).strftime("%H:%M %m/%d/%y")
                },
                {
                    USER:'******',
                    MESSAGE:BOT_RESPONSES[bot],
                    TIMESTAMP: datetime.now(TIME_ZONE).strftime("%H:%M %m/%d/%y")
                }
            ]

            with mock.patch("app.socketio.emit", mock_emit):
                with mock.patch("app.clients", MOCKCLIENTS):
                    with mock.patch("app.messages", MOCKMESSAGES):
                        with mock.patch("app.db.session", MOCKSESSION):
                            fill_mock_db(MOCKSESSION)
                            response =on_send_message(TESTMESSAGE)
                            self.assertTrue(response[RESPONSE] == 'messages updated')
                            self.assertEqual(response[DATA][MESSAGES], EXPECTEDMESSAGES)
                            MOCKDB = MOCKSESSION.query(models.Messages).all()
                            for i in range(0,len(MOCKDB)):
                                self.assertEqual(MOCKDB[i].name, EXPECTEDMESSAGES[i][USER])
                                self.assertEqual(MOCKDB[i].message, EXPECTEDMESSAGES[i][MESSAGE])
                                self.assertEqual(MOCKDB[i].time, EXPECTEDMESSAGES[i][TIMESTAMP])
コード例 #8
0
    def test_new_cards_success(self, mock_flash):
        session = UnifiedAlchemyMagicMock()
        for test in self.success_test_params:
            mock_flash.request.sid = test[KEY_INPUT][KEY_SID]
            app.new_cards.room = test[KEY_INPUT][KEY_DATA][0][KEY_ROOM]
            with mock.patch("models.DB.session", session):
                with mock.patch('app.get_room', self.mock_get_room):
                    app.new_cards(test[KEY_INPUT][KEY_DATA])

            query = session.query(models.Flashcards).all()[0]
            expected = test[KEY_EXPECTED]

            self.assertEqual(query.room, expected[2])
            self.assertEqual(query.answer, expected[1])
            self.assertEqual(query.question, expected[0])
コード例 #9
0
def test_create_new_user(app):
    """
    GIVEN a User model
    WHEN a new User is created
    THEN check the id, username, password, serialization and string representation
    """

    username = get_unique_username()
    password = '******'

    from app.model.models import User

    session = UnifiedAlchemyMagicMock()
    user = User(username=username, password=password)
    session.add(user)
    session.commit()

    query = session.query(User).first()
    assert query.username == username
    assert query.password == password
    assert query.serialize() == {'id': str(user.id), 'username': username}
    assert str(query) == '<User %r>' % (username)
コード例 #10
0
def test_create_new_token(app):
    """
    GIVEN a Token model
    WHEN a new token is created
    THEN check the id, jti, token_type, user_identity, revoked,
    expires serialization and string representation
    """

    from app.model.models import Token

    jti = "27d1b1a3-45b4-4a5f-83ed-b823f5ea1dbe"
    token_type = "access"
    user_identity = "test"
    revoked = True
    expires = datetime.now()

    session = UnifiedAlchemyMagicMock()
    token = Token(jti, token_type, user_identity, revoked, expires)
    session.add(token)
    session.commit()

    serialized_data = {
        'id': str(token.id),
        'jti': jti,
        'token_type': token_type,
        'user_identity': user_identity,
        'revoked': revoked,
        'expires': expires
    }

    query = session.query(Token).first()
    assert query.jti == jti
    assert query.token_type == token_type
    assert query.user_identity == user_identity
    assert query.revoked == revoked
    assert query.expires == expires
    assert query.serialize() == serialized_data
    assert str(query) == '<Token %r>' % (jti)
コード例 #11
0
    def test_sendImageMessages(self):
        """test sending image messages"""
        MOCKCLIENTS = TESTCLIENTS.copy()
        MOCKMESSAGES = TESTMESSAGES.copy()
        MOCKSESSION = UnifiedAlchemyMagicMock()
        TESTMESSAGE = {
            USER:'******',
            ID:'003',
            MESSAGE:('This is an image https://upload.wikimedia.org/wikipedia/commons/'+
            'thumb/3/3e/Tokyo_Sky_Tree_2012.JPG/220px-Tokyo_Sky_Tree_2012.jpg'),
        }
        EXPECTEDMESSAGES = [
            MOCKMESSAGES[0],
            MOCKMESSAGES[1],
            MOCKMESSAGES[2],
            {
                USER:'******',
                MESSAGE:("This is an image <img src='https://upload.wikimedia.org/wikipedia/"+
                "commons/thumb/3/3e/Tokyo_Sky_Tree_2012.JPG/220px-Tokyo_Sky_Tree_2012.jpg'"+
                " class='msgImg'/> "),
                TIMESTAMP: datetime.now(TIME_ZONE).strftime("%H:%M %m/%d/%y")
            }
        ]

        with mock.patch("app.socketio.emit", mock_emit):
            with mock.patch("app.clients", MOCKCLIENTS):
                with mock.patch("app.messages", MOCKMESSAGES):
                    with mock.patch("app.db.session", MOCKSESSION):
                        fill_mock_db(MOCKSESSION)
                        response =on_send_message(TESTMESSAGE)
                        self.assertTrue(response[RESPONSE] == 'messages updated')
                        self.assertEqual(response[DATA][MESSAGES], EXPECTEDMESSAGES)
                        MOCKDB = MOCKSESSION.query(models.Messages).all()
                        for i in range(0,len(MOCKDB)):
                            self.assertEqual(MOCKDB[i].name, EXPECTEDMESSAGES[i][USER])
                            self.assertEqual(MOCKDB[i].message, EXPECTEDMESSAGES[i][MESSAGE])
                            self.assertEqual(MOCKDB[i].time, EXPECTEDMESSAGES[i][TIMESTAMP])
コード例 #12
0
 def test_get_all(self):
     session = UnifiedAlchemyMagicMock()
     session.add(Action(id=1, type='tag', login='******', description='123',
                        result='ok', timestamp='123'))
     result = session.query(Action).all()
     return self.assertEqual(len(result), 1)
コード例 #13
0
class TestModels(TestCase):
    """
    Tests for checking that database models match up with the views schema pydantic models.

    The ORM model is a bit more complicated than the pydantic models, since it
    needs to keep track of an ordered list (not trivial in SQL).  The way I
    solved this was by using a linked list approach, where each Operation
    object points to the next one, or None.

    This means that it's important to test basic serialization /
    deserialization, since this conversion from list to LL is non-trivial.
    """
    def setUp(self):
        self.sess = UnifiedAlchemyMagicMock()

    def test_operation_chaining(self):
        """
        Test operation chaining when creating ORM representation.
        """
        posted_model = views_schema.Queryset(
            name="my_test_queryset",
            loa="priogrid_month",
            themes=["foo", "bar"],
            description="A description...",
            operations=[[
                views_schema.TransformOperation(name="my.transform",
                                                arguments=[]),
                views_schema.DatabaseOperation(name="table.column",
                                               arguments=["values"]),
            ]])
        orm_model = models.Queryset.from_pydantic(self.sess, posted_model)

        self.assertEqual(len(orm_model.op_chains()), 1)
        self.assertEqual(len(orm_model.op_chains()[0]), 2)

    def test_serialize_deserialize(self):
        """
        Test serialization back and forth from ORM for equivalence
        """
        pydantic_model = views_schema.Queryset(
            name="pydantic_queryset",
            loa="priogrid_month",
            themes=["a", "b"],
            description="My great description",
            operations=[
                [
                    views_schema.TransformOperation(name="some.transform",
                                                    arguments=[]),
                    views_schema.DatabaseOperation(name="t.c",
                                                   arguments=["values"])
                ],
                [
                    views_schema.DatabaseOperation(name="t.c",
                                                   arguments=["values"])
                ],
            ])

        orm_model = models.Queryset.from_pydantic(self.sess, pydantic_model)

        reserialized = views_schema.Queryset(**orm_model.dict())
        self.assertEqual(reserialized, pydantic_model)

    def test_roundtrip(self):
        pydantic_model = views_schema.Queryset(
            name="send_me_to_db",
            loa="country_month",
            themes=[":)"],
            description="This is a queryset used for testing.",
            operations=[
                [
                    views_schema.TransformOperation(name="alpha.beta",
                                                    arguments=["1", "2", "3"]),
                    views_schema.DatabaseOperation(name="my_table.my_column",
                                                   arguments=["values"])
                ],
                [
                    views_schema.DatabaseOperation(
                        name="another_table.something", arguments=["values"])
                ],
            ])

        self.sess.add(models.Queryset.from_pydantic(self.sess, pydantic_model))
        retrieved = self.sess.query(models.Queryset).first()
        reserialized = views_schema.Queryset(**retrieved.dict())
        self.assertEqual(reserialized, pydantic_model)
コード例 #14
0
    def test_send_bot_messages_with_unknown_results(self):
        """test sending complex bot messages"""
        BOT_COMMANDS = ['!! flip', '!! funtranslate I like apples.']
        BOT_RESPONSES = [
            [
               'The coin landed HEADS up',
               'The coin landed TAILS up'
            ],
            [
                'I-way ike-lay apples-way.',
                'Sorry the limit for translations has been reached'
            ]
        ]

        for bot in range(0,len(BOT_COMMANDS)):
            MOCKCLIENTS = TESTCLIENTS.copy()
            MOCKMESSAGES = TESTMESSAGES.copy()
            MOCKSESSION = UnifiedAlchemyMagicMock()
            TESTMESSAGE = {
                USER:'******',
                ID:'003',
                MESSAGE:BOT_COMMANDS[bot],
            }
            EXPECTEDMESSAGES = [[
                MOCKMESSAGES[0],
                MOCKMESSAGES[1],
                MOCKMESSAGES[2],
                {
                    USER:'******',
                    MESSAGE:BOT_COMMANDS[bot] + ' ',
                    TIMESTAMP: datetime.now(TIME_ZONE).strftime("%H:%M %m/%d/%y")
                },
                {
                    USER:'******',
                    MESSAGE:BOT_RESPONSES[bot][0],
                    TIMESTAMP: datetime.now(TIME_ZONE).strftime("%H:%M %m/%d/%y")
                }
            ],[
                MOCKMESSAGES[0],
                MOCKMESSAGES[1],
                MOCKMESSAGES[2],
                {
                    USER:'******',
                    MESSAGE:BOT_COMMANDS[bot] + ' ',
                    TIMESTAMP: datetime.now(TIME_ZONE).strftime("%H:%M %m/%d/%y")
                },
                {
                    USER:'******',
                    MESSAGE:BOT_RESPONSES[bot][1],
                    TIMESTAMP: datetime.now(TIME_ZONE).strftime("%H:%M %m/%d/%y")
                }
            ]]

            with mock.patch("app.socketio.emit", mock_emit):
                with mock.patch("app.clients", MOCKCLIENTS):
                    with mock.patch("app.messages", MOCKMESSAGES):
                        with mock.patch("app.db.session", MOCKSESSION):
                            fill_mock_db(MOCKSESSION)
                            response =on_send_message(TESTMESSAGE)
                            self.assertTrue(response[RESPONSE] == 'messages updated')
                            self.assertTrue((response[DATA][MESSAGES] == EXPECTEDMESSAGES[0]) 
                                or (response[DATA][MESSAGES] == EXPECTEDMESSAGES[1]))
                            MOCKDB = MOCKSESSION.query(models.Messages).all()
                            for i in range(0,len(MOCKDB)):
                                self.assertEqual(MOCKDB[i].name, EXPECTEDMESSAGES[0][i][USER])
                                self.assertTrue((MOCKDB[i].message==EXPECTEDMESSAGES[0][i][MESSAGE]
                                    or MOCKDB[i].message==EXPECTEDMESSAGES[1][i][MESSAGE]))
                                self.assertEqual(MOCKDB[i].time, EXPECTEDMESSAGES[0][i][TIMESTAMP])
コード例 #15
0
 def test_get_none(self):
     session = UnifiedAlchemyMagicMock()
     result = session.query(Token).all()
     return self.assertEqual(len(result), 0)
コード例 #16
0
 def test_get_all(self):
     session = UnifiedAlchemyMagicMock()
     session.add(
         Token(id=1, source_app='a', request_app='b', access_token='123'))
     result = session.query(Token).all()
     return self.assertEqual(len(result), 1)
コード例 #17
0
 def test_get_all(self):
     session = UnifiedAlchemyMagicMock()
     session.add(Place(id=1, name='a', type='b', description='123'))
     result = session.query(Place).all()
     return self.assertEqual(len(result), 1)
コード例 #18
0
 def test_get_all(self):
     session = UnifiedAlchemyMagicMock()
     session.add(Tag(id=1, name='a', added_by='user'))
     result = session.query(Tag).all()
     return self.assertEqual(len(result), 1)