datetime.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package httpexpect
  2. import (
  3. "time"
  4. )
  5. // DateTime provides methods to inspect attached time.Time value.
  6. type DateTime struct {
  7. chain chain
  8. value time.Time
  9. }
  10. // NewDateTime returns a new DateTime object given a reporter used to report
  11. // failures and time.Time value to be inspected.
  12. //
  13. // reporter should not be nil.
  14. //
  15. // Example:
  16. // dt := NewDateTime(reporter, time.Now())
  17. // dt.Le(time.Now())
  18. //
  19. // time.Sleep(time.Second)
  20. // dt.Lt(time.Now())
  21. func NewDateTime(reporter Reporter, value time.Time) *DateTime {
  22. return &DateTime{makeChain(reporter), value}
  23. }
  24. // Raw returns underlying time.Time value attached to DateTime.
  25. // This is the value originally passed to NewDateTime.
  26. //
  27. // Example:
  28. // dt := NewDateTime(t, timestamp)
  29. // assert.Equal(t, timestamp, dt.Raw())
  30. func (dt *DateTime) Raw() time.Time {
  31. return dt.value
  32. }
  33. // Equal succeeds if DateTime is equal to given value.
  34. //
  35. // Example:
  36. // dt := NewDateTime(t, time.Unix(0, 1))
  37. // dt.Equal(time.Unix(0, 1))
  38. func (dt *DateTime) Equal(value time.Time) *DateTime {
  39. if !dt.value.Equal(value) {
  40. dt.chain.fail("\nexpected datetime equal to:\n %s\n\nbut got:\n %s",
  41. value, dt.value)
  42. }
  43. return dt
  44. }
  45. // NotEqual succeeds if DateTime is not equal to given value.
  46. //
  47. // Example:
  48. // dt := NewDateTime(t, time.Unix(0, 1))
  49. // dt.NotEqual(time.Unix(0, 2))
  50. func (dt *DateTime) NotEqual(value time.Time) *DateTime {
  51. if dt.value.Equal(value) {
  52. dt.chain.fail("\nexpected datetime not equal to:\n %s", value)
  53. }
  54. return dt
  55. }
  56. // Gt succeeds if DateTime is greater than given value.
  57. //
  58. // Example:
  59. // dt := NewDateTime(t, time.Unix(0, 2))
  60. // dt.Gt(time.Unix(0, 1))
  61. func (dt *DateTime) Gt(value time.Time) *DateTime {
  62. if !dt.value.After(value) {
  63. dt.chain.fail("\nexpected datetime > then:\n %s\n\nbut got:\n %s",
  64. value, dt.value)
  65. }
  66. return dt
  67. }
  68. // Ge succeeds if DateTime is greater than or equal to given value.
  69. //
  70. // Example:
  71. // dt := NewDateTime(t, time.Unix(0, 2))
  72. // dt.Ge(time.Unix(0, 1))
  73. func (dt *DateTime) Ge(value time.Time) *DateTime {
  74. if !(dt.value.After(value) || dt.value.Equal(value)) {
  75. dt.chain.fail("\nexpected datetime >= then:\n %s\n\nbut got:\n %s",
  76. value, dt.value)
  77. }
  78. return dt
  79. }
  80. // Lt succeeds if DateTime is lesser than given value.
  81. //
  82. // Example:
  83. // dt := NewDateTime(t, time.Unix(0, 1))
  84. // dt.Lt(time.Unix(0, 2))
  85. func (dt *DateTime) Lt(value time.Time) *DateTime {
  86. if !dt.value.Before(value) {
  87. dt.chain.fail("\nexpected datetime < then:\n %s\n\nbut got:\n %s",
  88. value, dt.value)
  89. }
  90. return dt
  91. }
  92. // Le succeeds if DateTime is lesser than or equal to given value.
  93. //
  94. // Example:
  95. // dt := NewDateTime(t, time.Unix(0, 1))
  96. // dt.Le(time.Unix(0, 2))
  97. func (dt *DateTime) Le(value time.Time) *DateTime {
  98. if !(dt.value.Before(value) || dt.value.Equal(value)) {
  99. dt.chain.fail("\nexpected datetime <= then:\n %s\n\nbut got:\n %s",
  100. value, dt.value)
  101. }
  102. return dt
  103. }
  104. // InRange succeeds if DateTime is in given range [min; max].
  105. //
  106. // Example:
  107. // dt := NewDateTime(t, time.Unix(0, 2))
  108. // dt.InRange(time.Unix(0, 1), time.Unix(0, 3))
  109. // dt.InRange(time.Unix(0, 2), time.Unix(0, 2))
  110. func (dt *DateTime) InRange(min, max time.Time) *DateTime {
  111. if !((dt.value.After(min) || dt.value.Equal(min)) &&
  112. (dt.value.Before(max) || dt.value.Equal(max))) {
  113. dt.chain.fail(
  114. "\nexpected datetime in range:\n min: %s\n max: %s\n\nbut got: %s",
  115. min, max, dt.value)
  116. }
  117. return dt
  118. }