summaryrefslogtreecommitdiff
path: root/QSDeliciousPlugInTests.m
diff options
context:
space:
mode:
authorRuben Beltran del Rio <git@r.bdr.sh>2025-09-06 23:03:04 +0200
committerRuben Beltran del Rio <git@r.bdr.sh>2025-09-06 23:03:04 +0200
commit6f7a0e57ce0650c9e91b15e75ec9a0bb85f6ddb6 (patch)
treeb4d623e54f552488408f13e5f6ad5bed54643a29 /QSDeliciousPlugInTests.m
parent685a4d4b33991a315060145724d794d709ec6f3c (diff)
Make the provider functional
Diffstat (limited to 'QSDeliciousPlugInTests.m')
-rw-r--r--QSDeliciousPlugInTests.m89
1 files changed, 89 insertions, 0 deletions
diff --git a/QSDeliciousPlugInTests.m b/QSDeliciousPlugInTests.m
new file mode 100644
index 0000000..3aff4ff
--- /dev/null
+++ b/QSDeliciousPlugInTests.m
@@ -0,0 +1,89 @@
+//
+// QSDeliciousPlugInTests.m
+// QSDeliciousPlugIn
+//
+
+#import <Testing/Testing.h>
+#import "QSBookmarkProviderFactory.h"
+#import "QSDeliciousAPIProvider.h"
+#import "QSLinkdingProvider.h"
+#import "SocialSite.h"
+
+@suite("QSDeliciousPlugIn Strategy Pattern Tests")
+struct QSDeliciousPlugInTests {
+
+ @Test("Factory returns correct provider for Delicious")
+ func testDeliciousProvider() async throws {
+ QSBookmarkProviderFactory *factory = [QSBookmarkProviderFactory sharedFactory];
+
+ id<QSBookmarkProvider> provider = [factory providerForSite:SocialSiteDelicious
+ username:@"testuser"
+ password:@"testpass"
+ host:nil];
+
+ #expect(provider != nil, "Should return a provider for Delicious");
+ #expect([provider isKindOfClass:[QSDeliciousAPIProvider class]], "Should return a QSDeliciousAPIProvider for Delicious");
+ #expect([provider supportedSite] == SocialSiteDelicious, "Provider should support Delicious site");
+ }
+
+ @Test("Factory returns correct provider for Pinboard")
+ func testPinboardProvider() async throws {
+ QSBookmarkProviderFactory *factory = [QSBookmarkProviderFactory sharedFactory];
+
+ id<QSBookmarkProvider> provider = [factory providerForSite:SocialSitePinboard
+ username:@"testuser"
+ password:@"testpass"
+ host:nil];
+
+ #expect(provider != nil, "Should return a provider for Pinboard");
+ #expect([provider isKindOfClass:[QSDeliciousAPIProvider class]], "Should return a QSDeliciousAPIProvider for Pinboard");
+ #expect([provider supportedSite] == SocialSitePinboard, "Provider should support Pinboard site");
+ }
+
+ @Test("Factory returns correct provider for Linkding")
+ func testLinkdingProvider() async throws {
+ QSBookmarkProviderFactory *factory = [QSBookmarkProviderFactory sharedFactory];
+
+ id<QSBookmarkProvider> provider = [factory providerForSite:SocialSiteLinkding
+ username:@"testuser"
+ password:@"testtoken"
+ host:@"https://bookmarks.example.com"];
+
+ #expect(provider != nil, "Should return a provider for Linkding");
+ #expect([provider isKindOfClass:[QSLinkdingProvider class]], "Should return a QSLinkdingProvider for Linkding");
+ #expect([provider supportedSite] == SocialSiteLinkding, "Provider should support Linkding site");
+ }
+
+ @Test("Factory returns nil for invalid configuration")
+ func testInvalidConfiguration() async throws {
+ QSBookmarkProviderFactory *factory = [QSBookmarkProviderFactory sharedFactory];
+
+ // Test with empty username
+ id<QSBookmarkProvider> provider = [factory providerForSite:SocialSiteDelicious
+ username:@""
+ password:@"testpass"
+ host:nil];
+
+ #expect(provider == nil, "Should return nil for empty username");
+
+ // Test Linkding without host
+ provider = [factory providerForSite:SocialSiteLinkding
+ username:@"testuser"
+ password:@"testtoken"
+ host:@""];
+
+ #expect(provider == nil, "Should return nil for Linkding without host");
+ }
+
+ @Test("SocialSite helper methods work correctly")
+ func testSocialSiteHelpers() async throws {
+ #expect([[SocialSiteHelper displayNameForSite:SocialSiteDelicious] isEqualToString:@"del.icio.us"]);
+ #expect([[SocialSiteHelper displayNameForSite:SocialSiteLinkding] isEqualToString:@"Linkding"]);
+
+ #expect([[SocialSiteHelper siteURLForSite:SocialSitePinboard] isEqualToString:@"pinboard.in"]);
+ #expect([[SocialSiteHelper siteURLForSite:SocialSiteLinkding] isEqualToString:@""]);
+
+ #expect([[SocialSiteHelper reversedSiteURLForSite:SocialSiteDelicious] isEqualToString:@"us.icio.del"]);
+ #expect([[SocialSiteHelper reversedSiteURLForSite:SocialSiteLinkding] isEqualToString:@"linkding"]);
+ }
+}