cookie.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package httpexpect
  2. import (
  3. "net/http"
  4. "time"
  5. )
  6. // Cookie provides methods to inspect attached http.Cookie value.
  7. type Cookie struct {
  8. chain chain
  9. value *http.Cookie
  10. }
  11. // NewCookie returns a new Cookie object given a reporter used to report
  12. // failures and cookie value to be inspected.
  13. //
  14. // reporter and value should not be nil.
  15. //
  16. // Example:
  17. // cookie := NewCookie(reporter, &http.Cookie{...})
  18. // cookie.Domain().Equal("example.com")
  19. // cookie.Path().Equal("/")
  20. // cookie.Expires().InRange(time.Now(), time.Now().Add(time.Hour * 24))
  21. func NewCookie(reporter Reporter, value *http.Cookie) *Cookie {
  22. chain := makeChain(reporter)
  23. if value == nil {
  24. chain.fail("expected non-nil cookie")
  25. }
  26. return &Cookie{chain, value}
  27. }
  28. // Raw returns underlying http.Cookie value attached to Cookie.
  29. // This is the value originally passed to NewCookie.
  30. //
  31. // Example:
  32. // cookie := NewCookie(t, c)
  33. // assert.Equal(t, c, cookie.Raw())
  34. func (c *Cookie) Raw() *http.Cookie {
  35. return c.value
  36. }
  37. // Name returns a new String object that may be used to inspect
  38. // cookie name.
  39. //
  40. // Example:
  41. // cookie := NewCookie(t, &http.Cookie{...})
  42. // cookie.Name().Equal("session")
  43. func (c *Cookie) Name() *String {
  44. if c.chain.failed() {
  45. return &String{c.chain, ""}
  46. }
  47. return &String{c.chain, c.value.Name}
  48. }
  49. // Value returns a new String object that may be used to inspect
  50. // cookie value.
  51. //
  52. // Example:
  53. // cookie := NewCookie(t, &http.Cookie{...})
  54. // cookie.Value().Equal("gH6z7Y")
  55. func (c *Cookie) Value() *String {
  56. if c.chain.failed() {
  57. return &String{c.chain, ""}
  58. }
  59. return &String{c.chain, c.value.Value}
  60. }
  61. // Domain returns a new String object that may be used to inspect
  62. // cookie domain.
  63. //
  64. // Example:
  65. // cookie := NewCookie(t, &http.Cookie{...})
  66. // cookie.Domain().Equal("example.com")
  67. func (c *Cookie) Domain() *String {
  68. if c.chain.failed() {
  69. return &String{c.chain, ""}
  70. }
  71. return &String{c.chain, c.value.Domain}
  72. }
  73. // Path returns a new String object that may be used to inspect
  74. // cookie path.
  75. //
  76. // Example:
  77. // cookie := NewCookie(t, &http.Cookie{...})
  78. // cookie.Path().Equal("/foo")
  79. func (c *Cookie) Path() *String {
  80. if c.chain.failed() {
  81. return &String{c.chain, ""}
  82. }
  83. return &String{c.chain, c.value.Path}
  84. }
  85. // Expires returns a new DateTime object that may be used to inspect
  86. // cookie expiration date.
  87. //
  88. // Example:
  89. // cookie := NewCookie(t, &http.Cookie{...})
  90. // cookie.Expires().InRange(time.Now(), time.Now().Add(time.Hour * 24))
  91. func (c *Cookie) Expires() *DateTime {
  92. if c.chain.failed() {
  93. return &DateTime{c.chain, time.Unix(0, 0)}
  94. }
  95. return &DateTime{c.chain, c.value.Expires}
  96. }