nats-app/internal/domains/sensors/service_test.go

80 lines
1.6 KiB
Go

package sensors
import (
"testing"
"time"
"go.uber.org/mock/gomock"
)
func setup(t *testing.T) (*Service, *MockRepository) {
ctrl := gomock.NewController(t)
q := NewMockRepository(ctrl)
s := NewService(q)
return s, q
}
func Test_RegisterSensor(t *testing.T) {
type testCase struct {
name string
given Sensor
setupMock func(q *MockRepository, params Sensor)
expecErr bool
}
tests := []testCase{
{
name: "success - registers new sensor",
given: Sensor{
SensorID: "temp-001",
SensorType: Temperature,
SamplingInterval: ptr(time.Minute),
ThresholdAbove: ptr(100.0),
ThresholdBelow: ptr(0.0),
},
setupMock: func(q *MockRepository, params Sensor) {
q.EXPECT().CreateSensor(params).Return(nil)
},
expecErr: false,
},
{
name: "error - sensor already exists",
given: Sensor{
SensorID: "temp-001",
SensorType: Temperature,
SamplingInterval: ptr(time.Minute),
ThresholdAbove: ptr(100.0),
ThresholdBelow: ptr(0.0),
},
setupMock: func(q *MockRepository, params Sensor) {
q.EXPECT().CreateSensor(params).Return(ErrSensorAlreadyExists)
},
expecErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s, q := setup(t)
tt.setupMock(q, tt.given)
err := s.RegisterSensor(tt.given)
if tt.expecErr && err == nil {
t.Error("expected error, got nil")
return
}
if !tt.expecErr && err != nil {
t.Errorf("expected no error, got %v", err)
return
}
if tt.expecErr && err != ErrSensorAlreadyExists {
t.Errorf("expected ErrSensorAlreadyExists, got %v", err)
}
})
}
}