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)
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
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()
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)
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')
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')
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')
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')
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)
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')
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)