Browse Source

Merge pull request #4668 from pixelfed/staging

Staging
daniel 1 năm trước cách đây
mục cha
commit
7fdb87ef9b

+ 3 - 0
CHANGELOG.md

@@ -18,6 +18,9 @@
 - Update StatusService, hydrate accounts on request instead of caching them along with status objects ([223661ec](https://github.com/pixelfed/pixelfed/commit/223661ec))
 - Update profile embed, fix resize ([dc23c21d](https://github.com/pixelfed/pixelfed/commit/dc23c21d))
 - Update Status model, improve thumb logic ([d969a973](https://github.com/pixelfed/pixelfed/commit/d969a973))
+- Update Status model, allow unlisted thumbnails ([1f0a45b7](https://github.com/pixelfed/pixelfed/commit/1f0a45b7))
+- Update StatusTagsPipeline, fix object tags and slug normalization ([d295e605](https://github.com/pixelfed/pixelfed/commit/d295e605))
+-  ([](https://github.com/pixelfed/pixelfed/commit/))
 -  ([](https://github.com/pixelfed/pixelfed/commit/))
 
 ## [v0.11.9 (2023-08-21)](https://github.com/pixelfed/pixelfed/compare/v0.11.8...v0.11.9)

+ 9 - 4
app/Jobs/StatusPipeline/StatusTagsPipeline.php

@@ -45,6 +45,11 @@ class StatusTagsPipeline implements ShouldQueue
 	{
 		$res = $this->activity;
 		$status = $this->status;
+
+        if(isset($res['tag']['type'], $res['tag']['name'])) {
+            $res['tag'] = [$res['tag']];
+        }
+
 		$tags = collect($res['tag']);
 
 		// Emoji
@@ -73,19 +78,19 @@ class StatusTagsPipeline implements ShouldQueue
 
             if(config('database.default') === 'pgsql') {
             	$hashtag = Hashtag::where('name', 'ilike', $name)
-            		->orWhere('slug', 'ilike', str_slug($name))
+            		->orWhere('slug', 'ilike', str_slug($name, '-', false))
             		->first();
 
             	if(!$hashtag) {
             		$hashtag = new Hashtag;
             		$hashtag->name = $name;
-            		$hashtag->slug = str_slug($name);
+            		$hashtag->slug = str_slug($name, '-', false);
             		$hashtag->save();
             	}
             } else {
 				$hashtag = Hashtag::firstOrCreate([
-					'slug' => str_slug($name)
-				], [
+					'slug' => str_slug($name, '-', false),
+                ],[
 					'name' => $name
 				]);
             }

+ 133 - 0
tests/Unit/ActivityPubTagObjectTest.php

@@ -0,0 +1,133 @@
+<?php
+
+namespace Tests\Unit;
+
+use PHPUnit\Framework\TestCase;
+
+class ActivityPubTagObjectTest extends TestCase
+{
+    /**
+     * A basic unit test example.
+     */
+    public function test_gotosocial(): void
+    {
+        $res = [
+            "tag" => [
+                "href" => "https://gotosocial.example.org/users/GotosocialUser",
+                "name" => "@GotosocialUser@gotosocial.example.org",
+                "type" => "Mention"
+            ]
+        ];
+
+        if(isset($res['tag']['type'], $res['tag']['name'])) {
+            $res['tag'] = [$res['tag']];
+        }
+
+        $tags = collect($res['tag'])
+        ->filter(function($tag) {
+            return $tag &&
+                $tag['type'] == 'Mention' &&
+                isset($tag['href']) &&
+                substr($tag['href'], 0, 8) === 'https://';
+        });
+        $this->assertTrue($tags->count() === 1);
+    }
+
+    public function test_pixelfed_hashtags(): void
+    {
+        $res = [
+            "tag" => [
+                [
+                    "type" => "Mention",
+                    "href" => "https://pixelfed.social/dansup",
+                    "name" => "@dansup@pixelfed.social"
+                ],
+                [
+                    "type" => "Hashtag",
+                    "href" => "https://pixelfed.social/discover/tags/dogsofpixelfed",
+                    "name" => "#dogsOfPixelFed"
+                ],
+                [
+                    "type" => "Hashtag",
+                    "href" => "https://pixelfed.social/discover/tags/doggo",
+                    "name" => "#doggo"
+                ],
+                [
+                    "type" => "Hashtag",
+                    "href" => "https://pixelfed.social/discover/tags/dog",
+                    "name" => "#dog"
+                ],
+                [
+                    "type" => "Hashtag",
+                    "href" => "https://pixelfed.social/discover/tags/drake",
+                    "name" => "#drake"
+                ],
+                [
+                    "type" => "Hashtag",
+                    "href" => "https://pixelfed.social/discover/tags/blacklab",
+                    "name" => "#blacklab"
+                ],
+                [
+                    "type" => "Hashtag",
+                    "href" => "https://pixelfed.social/discover/tags/iconic",
+                    "name" => "#Iconic"
+                ],
+                [
+                    "type" => "Hashtag",
+                    "href" => "https://pixelfed.social/discover/tags/majestic",
+                    "name" => "#majestic"
+                ]
+            ]
+        ];
+
+        if(isset($res['tag']['type'], $res['tag']['name'])) {
+            $res['tag'] = [$res['tag']];
+        }
+
+        $tags = collect($res['tag'])
+        ->filter(function($tag) {
+            return $tag &&
+                $tag['type'] == 'Hashtag' &&
+                isset($tag['href']) &&
+                substr($tag['href'], 0, 8) === 'https://';
+        });
+        $this->assertTrue($tags->count() === 7);
+    }
+
+
+    public function test_pixelfed_mentions(): void
+    {
+        $res = [
+            "tag" => [
+                [
+                    "type" => "Mention",
+                    "href" => "https://pixelfed.social/dansup",
+                    "name" => "@dansup@pixelfed.social"
+                ],
+                [
+                    "type" => "Hashtag",
+                    "href" => "https://pixelfed.social/discover/tags/dogsofpixelfed",
+                    "name" => "#dogsOfPixelFed"
+                ],
+                [
+                    "type" => "Hashtag",
+                    "href" => "https://pixelfed.social/discover/tags/doggo",
+                    "name" => "#doggo"
+                ],
+            ]
+        ];
+
+        if(isset($res['tag']['type'], $res['tag']['name'])) {
+            $res['tag'] = [$res['tag']];
+        }
+
+        $tags = collect($res['tag'])
+        ->filter(function($tag) {
+            return $tag &&
+                $tag['type'] == 'Mention' &&
+                isset($tag['href']) &&
+                substr($tag['href'], 0, 8) === 'https://';
+        });
+        $this->assertTrue($tags->count() === 1);
+    }
+}