Files
shtrihscanner/pkg/shtrih/mock_driver.go
2025-08-21 10:42:35 +03:00

86 lines
3.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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
}