UpdatePersonValidationTest.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. namespace Tests\Unit\ActivityPub;
  3. use App\Util\ActivityPub\Validator\UpdatePersonValidator;
  4. use PHPUnit\Framework\Attributes\Test;
  5. use PHPUnit\Framework\TestCase;
  6. class UpdatePersonValidationTest extends TestCase
  7. {
  8. public $activity;
  9. public function setUp(): void
  10. {
  11. parent::setUp();
  12. $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);
  13. }
  14. #[Test]
  15. public function schemaTest()
  16. {
  17. $this->assertTrue(UpdatePersonValidator::validate($this->activity));
  18. }
  19. #[Test]
  20. public function invalidContext()
  21. {
  22. $activity = $this->activity;
  23. unset($activity['@context']);
  24. $activity['@@context'] = 'https://www.w3.org/ns/activitystreams';
  25. $this->assertFalse(UpdatePersonValidator::validate($activity));
  26. }
  27. #[Test]
  28. public function missingContext()
  29. {
  30. $activity = $this->activity;
  31. unset($activity['@context']);
  32. $this->assertFalse(UpdatePersonValidator::validate($activity));
  33. }
  34. #[Test]
  35. public function missingId()
  36. {
  37. $activity = $this->activity;
  38. unset($activity['id']);
  39. $this->assertFalse(UpdatePersonValidator::validate($activity));
  40. }
  41. #[Test]
  42. public function missingType()
  43. {
  44. $activity = $this->activity;
  45. unset($activity['type']);
  46. $this->assertFalse(UpdatePersonValidator::validate($activity));
  47. }
  48. #[Test]
  49. public function invalidType()
  50. {
  51. $activity = $this->activity;
  52. $activity['type'] = 'Create';
  53. $this->assertFalse(UpdatePersonValidator::validate($activity));
  54. }
  55. #[Test]
  56. public function invalidObjectType()
  57. {
  58. $activity = $this->activity;
  59. $activity['object']['type'] = 'Note';
  60. $this->assertFalse(UpdatePersonValidator::validate($activity));
  61. }
  62. #[Test]
  63. public function invalidActorMatchingObjectId()
  64. {
  65. $activity = $this->activity;
  66. $activity['object']['id'] = 'https://example.org/@user';
  67. $this->assertFalse(UpdatePersonValidator::validate($activity));
  68. }
  69. #[Test]
  70. public function invalidActorUrlMatchingObjectId()
  71. {
  72. $activity = $this->activity;
  73. $activity['object']['id'] = $activity['object']['id'] . 'test';
  74. $this->assertFalse(UpdatePersonValidator::validate($activity));
  75. }
  76. #[Test]
  77. public function missingActorPublicKey()
  78. {
  79. $activity = $this->activity;
  80. unset($activity['object']['publicKey']);
  81. $this->assertFalse(UpdatePersonValidator::validate($activity));
  82. }
  83. #[Test]
  84. public function invalidActorPublicKey()
  85. {
  86. $activity = $this->activity;
  87. $activity['object']['publicKey'] = null;
  88. $this->assertFalse(UpdatePersonValidator::validate($activity));
  89. }
  90. #[Test]
  91. public function invalidActorPublicKeyId()
  92. {
  93. $activity = $this->activity;
  94. $activity['object']['publicKey']['id'] = null;
  95. $this->assertFalse(UpdatePersonValidator::validate($activity));
  96. }
  97. #[Test]
  98. public function invalidActorPublicKeyIdHost()
  99. {
  100. $activity = $this->activity;
  101. $activity['object']['publicKey']['id'] = 'https://example.org/test';
  102. $this->assertFalse(UpdatePersonValidator::validate($activity));
  103. }
  104. #[Test]
  105. public function invalidActorAvatar()
  106. {
  107. $activity = $this->activity;
  108. $activity['object']['icon']['type'] = 'TikTok';
  109. $this->assertFalse(UpdatePersonValidator::validate($activity));
  110. }
  111. #[Test]
  112. public function invalidActorAvatarMediaType()
  113. {
  114. $activity = $this->activity;
  115. $activity['object']['icon']['mediaType'] = 'video/mp4';
  116. $this->assertFalse(UpdatePersonValidator::validate($activity));
  117. }
  118. #[Test]
  119. public function validActorAvatarMediaTypePng()
  120. {
  121. $activity = $this->activity;
  122. $activity['object']['icon']['mediaType'] = 'image/png';
  123. $this->assertTrue(UpdatePersonValidator::validate($activity));
  124. }
  125. #[Test]
  126. public function validActorAvatarMediaTypeJpeg()
  127. {
  128. $activity = $this->activity;
  129. $activity['object']['icon']['mediaType'] = 'image/jpeg';
  130. $this->assertTrue(UpdatePersonValidator::validate($activity));
  131. }
  132. #[Test]
  133. public function validActorAvatarMediaUrl()
  134. {
  135. $activity = $this->activity;
  136. $activity['object']['icon']['url'] = 'http://example.org/avatar.png';
  137. $this->assertTrue(UpdatePersonValidator::validate($activity));
  138. }
  139. }