86 lines
3.0 KiB
Go
86 lines
3.0 KiB
Go
// Package shtrih (продолжение)
|
||
package shtrih
|
||
|
||
import (
|
||
"fmt"
|
||
"log"
|
||
)
|
||
|
||
// mockDriver представляет собой имитацию реального драйвера для целей тестирования.
|
||
// Он реализует интерфейс Driver.
|
||
type mockDriver struct {
|
||
// MockData - это структура с фискальными данными, которую вернет GetFiscalInfo.
|
||
MockData *FiscalInfo
|
||
// ConnectErr - ошибка, которую вернет метод Connect, если она задана.
|
||
ConnectErr error
|
||
// GetFiscalInfoErr - ошибка, которую вернет метод GetFiscalInfo, если она задана.
|
||
GetFiscalInfoErr error
|
||
|
||
// Внутренние флаги для проверки вызовов в тестах.
|
||
connected bool
|
||
ConnectCalled bool
|
||
DisconnectCalled bool
|
||
GetFiscalInfoCalled bool
|
||
}
|
||
|
||
// NewMockDriver является конструктором для создания нового мок-драйвера.
|
||
// Позволяет заранее определить, какие данные и ошибки будут возвращаться.
|
||
func NewMockDriver(data *FiscalInfo, connectErr, getInfoErr error) Driver {
|
||
return &mockDriver{
|
||
MockData: data,
|
||
ConnectErr: connectErr,
|
||
GetFiscalInfoErr: getInfoErr,
|
||
}
|
||
}
|
||
|
||
// Connect имитирует подключение к ККТ.
|
||
func (m *mockDriver) Connect() error {
|
||
m.ConnectCalled = true
|
||
log.Println("Mock Driver: Connect() вызван.")
|
||
|
||
// Если была задана ошибка подключения, возвращаем ее.
|
||
if m.ConnectErr != nil {
|
||
return m.ConnectErr
|
||
}
|
||
// Если уже "подключены", ничего не делаем.
|
||
if m.connected {
|
||
return nil
|
||
}
|
||
m.connected = true
|
||
return nil
|
||
}
|
||
|
||
// Disconnect имитирует отключение от ККТ.
|
||
func (m *mockDriver) Disconnect() error {
|
||
m.DisconnectCalled = true
|
||
log.Println("Mock Driver: Disconnect() вызван.")
|
||
|
||
// Если не были "подключены", ничего не делаем.
|
||
if !m.connected {
|
||
return nil
|
||
}
|
||
m.connected = false
|
||
return nil
|
||
}
|
||
|
||
// GetFiscalInfo имитирует получение фискальных данных.
|
||
func (m *mockDriver) GetFiscalInfo() (*FiscalInfo, error) {
|
||
m.GetFiscalInfoCalled = true
|
||
log.Println("Mock Driver: GetFiscalInfo() вызван.")
|
||
|
||
// Проверяем, было ли установлено "соединение".
|
||
if !m.connected {
|
||
return nil, fmt.Errorf("мок-драйвер: не подключен")
|
||
}
|
||
// Если была задана ошибка получения данных, возвращаем ее.
|
||
if m.GetFiscalInfoErr != nil {
|
||
return nil, m.GetFiscalInfoErr
|
||
}
|
||
// Если не были предоставлены мок-данные, возвращаем ошибку.
|
||
if m.MockData == nil {
|
||
return nil, fmt.Errorf("мок-драйвер: данные для имитации не предоставлены")
|
||
}
|
||
|
||
return m.MockData, nil
|
||
}
|