gate_test.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package parking
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/require"
  5. )
  6. type gateControllerStub struct {
  7. openDevice string
  8. closeDevice string
  9. openTime byte
  10. closeTime byte
  11. }
  12. func (s *gateControllerStub) OpenGate(deviceCode string, validTime byte) error {
  13. s.openDevice = deviceCode
  14. s.openTime = validTime
  15. return nil
  16. }
  17. func (s *gateControllerStub) CloseGate(deviceCode string, validTime byte) error {
  18. s.closeDevice = deviceCode
  19. s.closeTime = validTime
  20. return nil
  21. }
  22. func (s *gateControllerStub) IsGateConnected(string) bool { return true }
  23. func TestPassageServiceUsesUnifiedGateController(t *testing.T) {
  24. previous := currentGateController()
  25. stub := &gateControllerStub{}
  26. SetGateController(stub)
  27. t.Cleanup(func() { SetGateController(previous) })
  28. svc := &PassageService{}
  29. require.NoError(t, svc.OpenGateByDeviceCode("GATE-01", 0))
  30. require.NoError(t, svc.CloseGateByDeviceCode("GATE-01", 5))
  31. require.Equal(t, "GATE-01", stub.openDevice)
  32. require.Equal(t, defaultGateValidTime, stub.openTime)
  33. require.Equal(t, "GATE-01", stub.closeDevice)
  34. require.Equal(t, byte(5), stub.closeTime)
  35. }
  36. func TestPassageServiceRejectsEmptyGateDevice(t *testing.T) {
  37. svc := &PassageService{}
  38. require.Error(t, svc.OpenGateByDeviceCode("", 2))
  39. require.Error(t, svc.CloseGateByDeviceCode("", 2))
  40. }
  41. func TestSimulatedGateController(t *testing.T) {
  42. controller := NewSimulatedGateController()
  43. require.True(t, controller.IsGateConnected("GATE-SIM-01"))
  44. require.False(t, controller.IsGateConnected(""))
  45. require.NoError(t, controller.OpenGate("GATE-SIM-01", 2))
  46. require.Equal(t, "open", controller.lastAction["GATE-SIM-01"])
  47. require.NoError(t, controller.CloseGate("GATE-SIM-01", 2))
  48. require.Equal(t, "close", controller.lastAction["GATE-SIM-01"])
  49. require.Error(t, controller.OpenGate("", 2))
  50. }
  51. func TestGetGateRuntimeStatus(t *testing.T) {
  52. previous := currentGateController()
  53. controller := NewSimulatedGateController()
  54. SetGateController(controller)
  55. t.Cleanup(func() { SetGateController(previous) })
  56. status := GetGateRuntimeStatus("GATE-SIM-01")
  57. require.True(t, status.Connected)
  58. require.True(t, status.Simulated)
  59. require.Equal(t, GateRuntimeStatus{}, GetGateRuntimeStatus(""))
  60. }