UpdatePersonValidationTest.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. namespace Tests\Unit\ActivityPub;
  3. use App\Util\ActivityPub\Validator\UpdatePersonValidator;
  4. use PHPUnit\Framework\TestCase;
  5. class UpdatePersonValidationTest extends TestCase
  6. {
  7. public $activity;
  8. public function setUp(): void
  9. {
  10. parent::setUp();
  11. $this->activity = json_decode('{"type":"Update","object":{"url":"http://mastodon.example.org/@gargron","type":"Person","summary":"<p>Some bio</p>","publicKey":{"publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0gs3VnQf6am3R+CeBV4H\nlfI1HZTNRIBHgvFszRZkCERbRgEWMu+P+I6/7GJC5H5jhVQ60z4MmXcyHOGmYMK/\n5XyuHQz7V2Ssu1AxLfRN5Biq1ayb0+DT/E7QxNXDJPqSTnstZ6C7zKH/uAETqg3l\nBonjCQWyds+IYbQYxf5Sp3yhvQ80lMwHML3DaNCMlXWLoOnrOX5/yK5+dedesg2\n/HIvGk+HEt36vm6hoH7bwPuEkgA++ACqwjXRe5Mta7i3eilHxFaF8XIrJFARV0t\nqOu4GID/jG6oA+swIWndGrtR2QRJIt9QIBFfK3HG5M0koZbY1eTqwNFRHFL3xaD\nUQIDAQAB\n-----END PUBLIC KEY-----\n","owner":"http://mastodon.example.org/users/gargron","id":"http://mastodon.example.org/users/gargron#main-key"},"preferredUsername":"gargron","outbox":"http://mastodon.example.org/users/gargron/outbox","name":"gargle","manuallyApprovesFollowers":false,"inbox":"http://mastodon.example.org/users/gargron/inbox","id":"http://mastodon.example.org/users/gargron","following":"http://mastodon.example.org/users/gargron/following","followers":"http://mastodon.example.org/users/gargron/followers","endpoints":{"sharedInbox":"http://mastodon.example.org/inbox"},"attachment":[{"type":"PropertyValue","name":"foo","value":"updated"},{"type":"PropertyValue","name":"foo1","value":"updated"}],"icon":{"type":"Image","mediaType":"image/jpeg","url":"https://cd.niu.moe/accounts/avatars/000/033/323/original/fd7f8ae0b3ffedc9.jpeg"},"image":{"type":"Image","mediaType":"image/png","url":"https://cd.niu.moe/accounts/headers/000/033/323/original/850b3448fa5fd477.png"}},"id":"http://mastodon.example.org/users/gargron#updates/1519563538","actor":"http://mastodon.example.org/users/gargron","@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"toot":"http://joinmastodon.org/ns#","sensitive":"as:sensitive","ostatus":"http://ostatus.org#","movedTo":"as:movedTo","manuallyApprovesFollowers":"as:manuallyApprovesFollowers","inReplyToAtomUri":"ostatus:inReplyToAtomUri","conversation":"ostatus:conversation","atomUri":"ostatus:atomUri","Hashtag":"as:Hashtag","Emoji":"toot:Emoji"}]}', true);
  12. }
  13. /** @test */
  14. public function schemaTest()
  15. {
  16. $this->assertTrue(UpdatePersonValidator::validate($this->activity));
  17. }
  18. /** @test */
  19. public function invalidContext()
  20. {
  21. $activity = $this->activity;
  22. unset($activity['@context']);
  23. $activity['@@context'] = 'https://www.w3.org/ns/activitystreams';
  24. $this->assertFalse(UpdatePersonValidator::validate($activity));
  25. }
  26. /** @test */
  27. public function missingContext()
  28. {
  29. $activity = $this->activity;
  30. unset($activity['@context']);
  31. $this->assertFalse(UpdatePersonValidator::validate($activity));
  32. }
  33. /** @test */
  34. public function missingId()
  35. {
  36. $activity = $this->activity;
  37. unset($activity['id']);
  38. $this->assertFalse(UpdatePersonValidator::validate($activity));
  39. }
  40. /** @test */
  41. public function missingType()
  42. {
  43. $activity = $this->activity;
  44. unset($activity['type']);
  45. $this->assertFalse(UpdatePersonValidator::validate($activity));
  46. }
  47. /** @test */
  48. public function invalidType()
  49. {
  50. $activity = $this->activity;
  51. $activity['type'] = 'Create';
  52. $this->assertFalse(UpdatePersonValidator::validate($activity));
  53. }
  54. /** @test */
  55. public function invalidObjectType()
  56. {
  57. $activity = $this->activity;
  58. $activity['object']['type'] = 'Note';
  59. $this->assertFalse(UpdatePersonValidator::validate($activity));
  60. }
  61. /** @test */
  62. public function invalidActorMatchingObjectId()
  63. {
  64. $activity = $this->activity;
  65. $activity['object']['id'] = 'https://example.org/@user';
  66. $this->assertFalse(UpdatePersonValidator::validate($activity));
  67. }
  68. /** @test */
  69. public function invalidActorUrlMatchingObjectId()
  70. {
  71. $activity = $this->activity;
  72. $activity['object']['id'] = $activity['object']['id'] . 'test';
  73. $this->assertFalse(UpdatePersonValidator::validate($activity));
  74. }
  75. /** @test */
  76. public function missingActorPublicKey()
  77. {
  78. $activity = $this->activity;
  79. unset($activity['object']['publicKey']);
  80. $this->assertFalse(UpdatePersonValidator::validate($activity));
  81. }
  82. /** @test */
  83. public function invalidActorPublicKey()
  84. {
  85. $activity = $this->activity;
  86. $activity['object']['publicKey'] = null;
  87. $this->assertFalse(UpdatePersonValidator::validate($activity));
  88. }
  89. /** @test */
  90. public function invalidActorPublicKeyId()
  91. {
  92. $activity = $this->activity;
  93. $activity['object']['publicKey']['id'] = null;
  94. $this->assertFalse(UpdatePersonValidator::validate($activity));
  95. }
  96. /** @test */
  97. public function invalidActorPublicKeyIdHost()
  98. {
  99. $activity = $this->activity;
  100. $activity['object']['publicKey']['id'] = 'https://example.org/test';
  101. $this->assertFalse(UpdatePersonValidator::validate($activity));
  102. }
  103. /** @test */
  104. public function invalidActorAvatar()
  105. {
  106. $activity = $this->activity;
  107. $activity['object']['icon']['type'] = 'TikTok';
  108. $this->assertFalse(UpdatePersonValidator::validate($activity));
  109. }
  110. /** @test */
  111. public function invalidActorAvatarMediaType()
  112. {
  113. $activity = $this->activity;
  114. $activity['object']['icon']['mediaType'] = 'video/mp4';
  115. $this->assertFalse(UpdatePersonValidator::validate($activity));
  116. }
  117. /** @test */
  118. public function validActorAvatarMediaTypePng()
  119. {
  120. $activity = $this->activity;
  121. $activity['object']['icon']['mediaType'] = 'image/png';
  122. $this->assertTrue(UpdatePersonValidator::validate($activity));
  123. }
  124. /** @test */
  125. public function validActorAvatarMediaTypeJpeg()
  126. {
  127. $activity = $this->activity;
  128. $activity['object']['icon']['mediaType'] = 'image/jpeg';
  129. $this->assertTrue(UpdatePersonValidator::validate($activity));
  130. }
  131. /** @test */
  132. public function validActorAvatarMediaUrl()
  133. {
  134. $activity = $this->activity;
  135. $activity['object']['icon']['url'] = 'http://example.org/avatar.png';
  136. $this->assertTrue(UpdatePersonValidator::validate($activity));
  137. }
  138. }