Exemplo n.º 1
0
    def test_insert_from_file_invalid_header(self, mocker, tmpfiles):
        mock_connect = mocker.patch("giraffez.cmd.TeradataCmd._connect")
        mock_execute = mocker.patch("giraffez.cmd.TeradataCmd.execute")

        columns = Columns([
            ("col1", VARCHAR_NN, 50, 0, 0),
            ("col2", VARCHAR_N, 50, 0, 0),
            ("col3", VARCHAR_N, 50, 0, 0),
        ])

        mock_columns = mocker.patch("giraffez.cmd.TeradataCmd.fetch_columns")

        mock_columns.return_value = columns

        # Invalid column (blank string)
        with open(tmpfiles.load_file, 'w') as f:
            f.write("|".join(["col1", "col2", "col3", "", ""]))
            f.write("\n")
            f.write("|".join(["value1", "value2", "value3"]))
            f.write("\n")

        with giraffez.Cmd() as cmd:
            with pytest.raises(GiraffeError):
                result = cmd.insert("db1.test",
                                    tmpfiles.load_file,
                                    delimiter="|")
                print(result)

        # Invalid column (wrong name)
        with open(tmpfiles.load_file, 'w') as f:
            f.write("|".join(["col1", "col2", "col4"]))
            f.write("\n")
            f.write("|".join(["value1", "value2", "value3"]))
            f.write("\n")

        with giraffez.Cmd() as cmd:
            with pytest.raises(GiraffeError):
                result = cmd.insert("db1.test",
                                    tmpfiles.load_file,
                                    delimiter="|")
                print(result)

        # Too many columns (duplicate name)
        with open(tmpfiles.load_file, 'w') as f:
            f.write("|".join(["col1", "col2", "col3", "col3"]))
            f.write("\n")
            f.write("|".join(["value1", "value2", "value3"]))
            f.write("\n")

        with giraffez.Cmd() as cmd:
            with pytest.raises(GiraffeEncodeError):
                result = cmd.insert("db1.test",
                                    tmpfiles.load_file,
                                    delimiter="|")
                print(result)
Exemplo n.º 2
0
    def test_insert_from_file(self, mocker, tmpfiles):
        mock_connect = mocker.patch("giraffez.cmd.TeradataCmd._connect")
        mock_execute = mocker.patch("giraffez.cmd.TeradataCmd.execute")

        columns = Columns([
            ("col1", VARCHAR_NN, 50, 0, 0),
            ("col2", VARCHAR_N, 50, 0, 0),
            ("col3", VARCHAR_N, 50, 0, 0),
        ])

        mock_columns = mocker.patch("giraffez.cmd.TeradataCmd.fetch_columns")

        mock_columns.return_value = columns

        with open(tmpfiles.load_file, 'w') as f:
            f.write("|".join(["col1", "col2", "col3"]))
            f.write("\n")
            rows = []
            for i in range(100):
                rows.append("|".join(["value1", "value2", "value3"]))
            f.write("\n".join(rows))

        with giraffez.Cmd() as cmd:
            result = cmd.insert("db1.test", tmpfiles.load_file, delimiter="|")
        assert result.get('count') == 100
Exemplo n.º 3
0
    def test_invalid_credentials(self, mocker):
        connect_mock = mocker.patch('giraffez.cmd.TeradataCmd._connect')
        connect_mock.side_effect = InvalidCredentialsError("test")

        with pytest.raises(InvalidCredentialsError):
            cmd = giraffez.Cmd(protect=True)
            cmd._close()
Exemplo n.º 4
0
    def test_insert_from_file_error_panic(self, mocker, tmpfiles):
        mock_connect = mocker.patch("giraffez.cmd.TeradataCmd._connect")
        mock_execute = mocker.patch("giraffez.cmd.TeradataCmd.execute")

        columns = Columns([
            ("col1", VARCHAR_NN, 50, 0, 0),
            ("col2", VARCHAR_N, 50, 0, 0),
            ("col3", VARCHAR_N, 50, 0, 0),
        ])

        mock_columns = mocker.patch("giraffez.cmd.TeradataCmd.fetch_columns")

        mock_columns.return_value = columns

        with open(tmpfiles.load_file, 'w') as f:
            f.write("|".join(["col1", "col2", "col3"]))
            f.write("\n")
            f.write("|".join(["value1", "value2", "value3", "value4"]))
            f.write("\n")

        with giraffez.Cmd() as cmd:
            with pytest.raises(GiraffeEncodeError):
                result = cmd.insert("db1.test",
                                    tmpfiles.load_file,
                                    delimiter="|")
                print(result)
Exemplo n.º 5
0
    def test_with_context(self, mocker):
        connect_mock = mocker.patch('giraffez.cmd.TeradataCmd._connect')

        with giraffez.Cmd() as cmd:
            pass
        
        connect_mock.assert_called_with('db1', 'user123', 'pass456')
Exemplo n.º 6
0
    def test_without_context(self, mocker):
        connect_mock = mocker.patch('giraffez.cmd.TeradataCmd._connect')

        query = "select * from db1.info"
        with pytest.raises(GiraffeError) as e:
            cmd = giraffez.Cmd()
            cmd.execute(query)
        e.match('used outside of a with context')
Exemplo n.º 7
0
    def test_allow_with_context(self, mocker):
        connect_mock = mocker.patch('giraffez.cmd.TeradataCmd._connect')

        query = "select * from db1.info"
        with giraffez.Cmd(allow_without_context=True) as cmd:
            pass

        connect_mock.assert_called_with('db1', 'user123', 'pass456')
Exemplo n.º 8
0
    def test_allow_without_context(self, mocker):
        connect_mock = mocker.patch('giraffez.cmd.TeradataCmd._connect')
        execute_mock = mocker.patch('giraffez.cmd.TeradataCmd.execute')

        query = "select * from db1.info"
        cmd = giraffez.Cmd(allow_without_context=True)
        cmd.execute(query)

        connect_mock.assert_called_with('db1', 'user123', 'pass456')
Exemplo n.º 9
0
    def test_results(self, mocker):
        connect_mock = mocker.patch('giraffez.cmd.TeradataCmd._connect')
        mock_columns = mocker.patch("giraffez.cmd.Cursor._columns")

        cmd = giraffez.Cmd()
        query = "select * from db1.info"
        columns = Columns([
            ("col1", VARCHAR_NN, 50, 0, 0),
            ("col2", VARCHAR_N, 50, 0, 0),
            ("col3", VARCHAR_N, 50, 0, 0),
        ])

        mock_columns.return_value = columns

        rows = [
            ["value1", "value2", "value3"],
            ["value1", "value2", "value3"],
            ["value1", "value2", "value3"],
        ]

        expected_rows = [
            {
                "col1": "value1",
                "col2": "value2",
                "col3": "value3"
            },
            {
                "col1": "value1",
                "col2": "value2",
                "col3": "value3"
            },
            {
                "col1": "value1",
                "col2": "value2",
                "col3": "value3"
            },
        ]
        cmd.cmd = mocker.MagicMock()
        cmd.cmd.fetchone.side_effect = ResultsHelper(rows)
        result = list(cmd.execute(query))

        assert [x.items() for x in result] == expected_rows

        cmd._close()

        # This ensures that the config was proper mocked
        connect_mock.assert_called_with('db1', 'user123', 'pass456', None,
                                        None)
Exemplo n.º 10
0
    def test_results(self, mocker):
        connect_mock = mocker.patch('giraffez.Cmd._connect')

        cmd = giraffez.Cmd()
        query = "select * from db1.info"
        columns = [
            ("col1", VARCHAR_NN, 50, 0, 0),
            ("col2", VARCHAR_N, 50, 0, 0),
            ("col3", VARCHAR_N, 50, 0, 0),
        ]
        rows = [
            ["value1", "value2", "value3"],
            ["value1", "value2", "value3"],
            ["value1", "value2", "value3"],
        ]

        cmd.close()
        
        # This ensures that the config was proper mocked
        connect_mock.assert_called_with('db1', 'user123', 'pass456')
Exemplo n.º 11
0
    def test_insert_insert_no_specify_fields(self, mocker):
        mock_connect = mocker.patch("giraffez.cmd.TeradataCmd._connect")
        mock_execute = mocker.patch("giraffez.cmd.TeradataCmd.execute")

        columns = Columns([
            ("col1", VARCHAR_NN, 50, 0, 0),
            ("col2", VARCHAR_N, 50, 0, 0),
            ("col3", VARCHAR_N, 50, 0, 0),
        ])

        mock_columns = mocker.patch("giraffez.cmd.TeradataCmd.fetch_columns")

        mock_columns.return_value = columns

        rows = [
            ("value1", "value3"),
            ("value1", "value3"),
            ("value1", "value3"),
        ]

        with giraffez.Cmd() as cmd:
            with pytest.raises(GiraffeEncodeError):
                cmd.insert("db1.test", rows)