ValidationDataTest.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <?php
  2. /**
  3. * This file is part of Lcobucci\JWT, a simple library to handle JWT and JWS
  4. *
  5. * @license http://opensource.org/licenses/BSD-3-Clause BSD-3-Clause
  6. */
  7. namespace Lcobucci\JWT;
  8. /**
  9. * @author Luís Otávio Cobucci Oblonczyk <lcobucci@gmail.com>
  10. * @since 2.0.0
  11. */
  12. class ValidationDataTest extends \PHPUnit\Framework\TestCase
  13. {
  14. /**
  15. * @test
  16. *
  17. * @covers Lcobucci\JWT\ValidationData::__construct
  18. * @covers Lcobucci\JWT\ValidationData::setCurrentTime
  19. */
  20. public function constructorShouldConfigureTheItems()
  21. {
  22. $expected = $this->createExpectedData();
  23. $data = new ValidationData(1);
  24. $this->assertAttributeSame($expected, 'items', $data);
  25. }
  26. /**
  27. * @test
  28. *
  29. * @covers Lcobucci\JWT\ValidationData::__construct
  30. * @covers Lcobucci\JWT\ValidationData::setCurrentTime
  31. */
  32. public function constructorWithLeewayShouldConfigureTheItems()
  33. {
  34. $expected = $this->createExpectedData(null, null, null, null, 111, 111, 89);
  35. $data = new ValidationData(100, 11);
  36. $this->assertAttributeSame($expected, 'items', $data);
  37. }
  38. /**
  39. * @test
  40. *
  41. * @dataProvider claimValues
  42. *
  43. * @uses Lcobucci\JWT\ValidationData::__construct
  44. * @uses Lcobucci\JWT\ValidationData::setCurrentTime
  45. *
  46. * @covers Lcobucci\JWT\ValidationData::setId
  47. */
  48. public function setIdShouldChangeTheId($id)
  49. {
  50. $expected = $this->createExpectedData($id);
  51. $data = new ValidationData(1);
  52. $data->setId($id);
  53. $this->assertAttributeSame($expected, 'items', $data);
  54. }
  55. /**
  56. * @test
  57. *
  58. * @dataProvider claimValues
  59. *
  60. * @uses Lcobucci\JWT\ValidationData::__construct
  61. * @uses Lcobucci\JWT\ValidationData::setCurrentTime
  62. *
  63. * @covers Lcobucci\JWT\ValidationData::setIssuer
  64. */
  65. public function setIssuerShouldChangeTheIssuer($iss)
  66. {
  67. $expected = $this->createExpectedData(null, null, $iss);
  68. $data = new ValidationData(1);
  69. $data->setIssuer($iss);
  70. $this->assertAttributeSame($expected, 'items', $data);
  71. }
  72. /**
  73. * @test
  74. *
  75. * @dataProvider claimValues
  76. *
  77. * @uses Lcobucci\JWT\ValidationData::__construct
  78. * @uses Lcobucci\JWT\ValidationData::setCurrentTime
  79. *
  80. * @covers Lcobucci\JWT\ValidationData::setAudience
  81. */
  82. public function setAudienceShouldChangeTheAudience($aud)
  83. {
  84. $expected = $this->createExpectedData(null, null, null, $aud);
  85. $data = new ValidationData(1);
  86. $data->setAudience($aud);
  87. $this->assertAttributeSame($expected, 'items', $data);
  88. }
  89. /**
  90. * @test
  91. *
  92. * @dataProvider claimValues
  93. *
  94. * @uses Lcobucci\JWT\ValidationData::__construct
  95. * @uses Lcobucci\JWT\ValidationData::setCurrentTime
  96. *
  97. * @covers Lcobucci\JWT\ValidationData::setSubject
  98. */
  99. public function setSubjectShouldChangeTheSubject($sub)
  100. {
  101. $expected = $this->createExpectedData(null, $sub);
  102. $data = new ValidationData(1);
  103. $data->setSubject($sub);
  104. $this->assertAttributeSame($expected, 'items', $data);
  105. }
  106. /**
  107. * @test
  108. *
  109. * @uses Lcobucci\JWT\ValidationData::__construct
  110. * @uses Lcobucci\JWT\ValidationData::setCurrentTime
  111. *
  112. * @covers Lcobucci\JWT\ValidationData::setCurrentTime
  113. */
  114. public function setCurrentTimeShouldChangeTheTimeBasedValues()
  115. {
  116. $expected = $this->createExpectedData(null, null, null, null, 2);
  117. $data = new ValidationData(1);
  118. $data->setCurrentTime(2);
  119. $this->assertAttributeSame($expected, 'items', $data);
  120. }
  121. /**
  122. * @test
  123. *
  124. * @uses Lcobucci\JWT\ValidationData::__construct
  125. * @uses Lcobucci\JWT\ValidationData::setCurrentTime
  126. *
  127. * @covers Lcobucci\JWT\ValidationData::setCurrentTime
  128. */
  129. public function setCurrentTimeShouldChangeTheTimeBasedValuesUsingLeeway()
  130. {
  131. $expected = $this->createExpectedData(null, null, null, null, 30, 30, 10);
  132. $data = new ValidationData(15, 10);
  133. $data->setCurrentTime(20);
  134. $this->assertAttributeSame($expected, 'items', $data);
  135. }
  136. /**
  137. * @test
  138. *
  139. * @uses Lcobucci\JWT\ValidationData::__construct
  140. * @uses Lcobucci\JWT\ValidationData::setCurrentTime
  141. *
  142. * @covers Lcobucci\JWT\ValidationData::has
  143. */
  144. public function hasShouldReturnTrueWhenItemIsNotEmpty()
  145. {
  146. $data = new ValidationData(1);
  147. $this->assertTrue($data->has('iat'));
  148. }
  149. /**
  150. * @test
  151. *
  152. * @uses Lcobucci\JWT\ValidationData::__construct
  153. * @uses Lcobucci\JWT\ValidationData::setCurrentTime
  154. *
  155. * @covers Lcobucci\JWT\ValidationData::has
  156. */
  157. public function hasShouldReturnFalseWhenItemIsEmpty()
  158. {
  159. $data = new ValidationData(1);
  160. $this->assertFalse($data->has('jti'));
  161. }
  162. /**
  163. * @test
  164. *
  165. * @uses Lcobucci\JWT\ValidationData::__construct
  166. * @uses Lcobucci\JWT\ValidationData::setCurrentTime
  167. *
  168. * @covers Lcobucci\JWT\ValidationData::has
  169. */
  170. public function hasShouldReturnFalseWhenItemIsNotDefined()
  171. {
  172. $data = new ValidationData(1);
  173. $this->assertFalse($data->has('test'));
  174. }
  175. /**
  176. * @test
  177. *
  178. * @uses Lcobucci\JWT\ValidationData::__construct
  179. * @uses Lcobucci\JWT\ValidationData::setCurrentTime
  180. *
  181. * @covers Lcobucci\JWT\ValidationData::get
  182. */
  183. public function getShouldReturnTheItemValue()
  184. {
  185. $data = new ValidationData(1);
  186. $this->assertEquals(1, $data->get('iat'));
  187. }
  188. /**
  189. * @test
  190. *
  191. * @uses Lcobucci\JWT\ValidationData::__construct
  192. * @uses Lcobucci\JWT\ValidationData::setCurrentTime
  193. *
  194. * @covers Lcobucci\JWT\ValidationData::get
  195. */
  196. public function getShouldReturnNullWhenItemIsNotDefined()
  197. {
  198. $data = new ValidationData(1);
  199. $this->assertNull($data->get('test'));
  200. }
  201. /**
  202. * @return array
  203. */
  204. public function claimValues()
  205. {
  206. return [
  207. [1],
  208. ['test']
  209. ];
  210. }
  211. /**
  212. * @param string|null $id
  213. * @param string|null $sub
  214. * @param string|null $iss
  215. * @param string|null $aud
  216. * @param int $iat
  217. * @param int|null $nbf
  218. * @param int|null $exp
  219. *
  220. * @return array
  221. */
  222. private function createExpectedData(
  223. $id = null,
  224. $sub = null,
  225. $iss = null,
  226. $aud = null,
  227. $iat = 1,
  228. $nbf = null,
  229. $exp = null
  230. ) {
  231. return [
  232. 'jti' => $id !== null ? (string) $id : null,
  233. 'iss' => $iss !== null ? (string) $iss : null,
  234. 'aud' => $aud !== null ? (string) $aud : null,
  235. 'sub' => $sub !== null ? (string) $sub : null,
  236. 'iat' => $iat,
  237. 'nbf' => $nbf !== null ? $nbf: $iat,
  238. 'exp' => $exp !== null ? $exp: $iat
  239. ];
  240. }
  241. }