diff options
| author | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-09-06 23:03:04 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-09-06 23:03:04 +0200 |
| commit | 6f7a0e57ce0650c9e91b15e75ec9a0bb85f6ddb6 (patch) | |
| tree | b4d623e54f552488408f13e5f6ad5bed54643a29 /QSDeliciousPlugInTests.m | |
| parent | 685a4d4b33991a315060145724d794d709ec6f3c (diff) | |
Make the provider functional
Diffstat (limited to 'QSDeliciousPlugInTests.m')
| -rw-r--r-- | QSDeliciousPlugInTests.m | 89 |
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"]); + } +} |