summaryrefslogtreecommitdiff
path: root/QSDeliciousPlugInTests.m
blob: 3aff4ff31796c982fe7dfdd801a41c2aa4bec003 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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"]);
    }
}