marco@16
|
1 from . import TestController
|
marco@16
|
2
|
marco@16
|
3 from sword2 import SDCollection, ServiceDocument
|
marco@16
|
4 from sword2.compatible_libs import json
|
marco@16
|
5
|
marco@16
|
6 class TestSDCollection(TestController):
|
marco@16
|
7 def test_01_blank_init(self):
|
marco@16
|
8 c = SDCollection()
|
marco@16
|
9 assert c.title == None
|
marco@16
|
10 assert c.href == None
|
marco@16
|
11
|
marco@16
|
12 def test_02_init(self):
|
marco@16
|
13 c = SDCollection(title="My test collection", href="http://example.org")
|
marco@16
|
14 assert c.title == "My test collection"
|
marco@16
|
15 assert c.href == "http://example.org"
|
marco@16
|
16
|
marco@16
|
17 def test_03_init_and_update(self):
|
marco@16
|
18 c = SDCollection(title="My test collection", href="http://example.org")
|
marco@16
|
19 assert c.title == "My test collection"
|
marco@16
|
20 assert c.href == "http://example.org"
|
marco@16
|
21 c.title = "Altered Title"
|
marco@16
|
22 assert c.title == "Altered Title"
|
marco@16
|
23
|
marco@16
|
24 def test_04_init_and_update_json_test(self):
|
marco@16
|
25 c = SDCollection(title="My test collection", href="http://example.org")
|
marco@16
|
26 assert c.title == "My test collection"
|
marco@16
|
27 assert c.href == "http://example.org"
|
marco@16
|
28 c.title = "Altered Title"
|
marco@16
|
29 assert c.title == "Altered Title"
|
marco@16
|
30 j = c.to_json()
|
marco@16
|
31 j_data = json.loads(j)
|
marco@16
|
32 assert j_data['title'] == "Altered Title"
|
marco@16
|
33 assert j_data['href'] == "http://example.org"
|
marco@16
|
34 assert j_data['accept'] == []
|
marco@16
|
35
|
marco@16
|
36 short_service_doc = '''<?xml version="1.0" ?>
|
marco@16
|
37 <service xmlns:dcterms="http://purl.org/dc/terms/"
|
marco@16
|
38 xmlns:sword="http://purl.org/net/sword/terms/"
|
marco@16
|
39 xmlns:atom="http://www.w3.org/2005/Atom"
|
marco@16
|
40 xmlns="http://www.w3.org/2007/app">
|
marco@16
|
41
|
marco@16
|
42 <sword:version>2.0</sword:version>
|
marco@16
|
43 <sword:maxUploadSize>16777216</sword:maxUploadSize>
|
marco@16
|
44
|
marco@16
|
45 <workspace>
|
marco@16
|
46 <atom:title>Main Site</atom:title>
|
marco@16
|
47
|
marco@16
|
48 <collection href="http://swordapp.org/col-iri/43">
|
marco@16
|
49 <atom:title>Collection 43</atom:title>
|
marco@16
|
50 <accept>*/*</accept>
|
marco@16
|
51 <accept alternate="multipart-related">*/*</accept>
|
marco@16
|
52 <sword:collectionPolicy>Collection Policy</sword:collectionPolicy>
|
marco@16
|
53 <dcterms:abstract>Collection Description</dcterms:abstract>
|
marco@16
|
54 <sword:mediation>false</sword:mediation>
|
marco@16
|
55 <sword:treatment>Treatment description</sword:treatment>
|
marco@16
|
56 <sword:acceptPackaging>http://purl.org/net/sword/package/SimpleZip</sword:acceptPackaging>
|
marco@16
|
57 <sword:acceptPackaging>http://purl.org/net/sword/package/METSDSpaceSIP</sword:acceptPackaging>
|
marco@16
|
58 <sword:service>http://swordapp.org/sd-iri/e4</sword:service>
|
marco@16
|
59 </collection>
|
marco@16
|
60 </workspace>
|
marco@16
|
61 </service>'''
|
marco@16
|
62
|
marco@16
|
63 long_service_doc = '''<?xml version="1.0" ?>
|
marco@16
|
64 <service xmlns:dcterms="http://purl.org/dc/terms/"
|
marco@16
|
65 xmlns:sword="http://purl.org/net/sword/terms/"
|
marco@16
|
66 xmlns:atom="http://www.w3.org/2005/Atom"
|
marco@16
|
67 xmlns="http://www.w3.org/2007/app">
|
marco@16
|
68
|
marco@16
|
69 <sword:version>2.0</sword:version>
|
marco@16
|
70 <sword:maxUploadSize>16777216</sword:maxUploadSize>
|
marco@16
|
71
|
marco@16
|
72 <workspace>
|
marco@16
|
73 <atom:title>Main Site</atom:title>
|
marco@16
|
74
|
marco@16
|
75 <collection href="http://swordapp.org/col-iri/43">
|
marco@16
|
76 <atom:title>Collection 43</atom:title>
|
marco@16
|
77 <accept>*/*</accept>
|
marco@16
|
78 <accept alternate="multipart-related">*/*</accept>
|
marco@16
|
79 <sword:collectionPolicy>Collection Policy</sword:collectionPolicy>
|
marco@16
|
80 <dcterms:abstract>Collection Description</dcterms:abstract>
|
marco@16
|
81 <sword:mediation>false</sword:mediation>
|
marco@16
|
82 <sword:treatment>Treatment description</sword:treatment>
|
marco@16
|
83 <sword:acceptPackaging>http://purl.org/net/sword/package/SimpleZip</sword:acceptPackaging>
|
marco@16
|
84 <sword:acceptPackaging>http://purl.org/net/sword/package/METSDSpaceSIP</sword:acceptPackaging>
|
marco@16
|
85 <sword:service>http://swordapp.org/sd-iri/e4</sword:service>
|
marco@16
|
86 </collection>
|
marco@16
|
87 </workspace>
|
marco@16
|
88 <workspace>
|
marco@16
|
89 <atom:title>Sub-site</atom:title>
|
marco@16
|
90
|
marco@16
|
91 <collection href="http://swordapp.org/col-iri/44">
|
marco@16
|
92 <atom:title>Collection 44</atom:title>
|
marco@16
|
93 <accept>*/*</accept>
|
marco@16
|
94 <accept alternate="multipart-related">*/*</accept>
|
marco@16
|
95 <sword:collectionPolicy>Collection Policy</sword:collectionPolicy>
|
marco@16
|
96 <dcterms:abstract>Collection Description</dcterms:abstract>
|
marco@16
|
97 <sword:mediation>true</sword:mediation>
|
marco@16
|
98 <sword:treatment>Treatment description</sword:treatment>
|
marco@16
|
99 <sword:acceptPackaging>http://purl.org/net/sword/package/SimpleZip</sword:acceptPackaging>
|
marco@16
|
100 <sword:service>http://swordapp.org/sd-iri/e5</sword:service>
|
marco@16
|
101 <sword:service>http://swordapp.org/sd-iri/e6</sword:service>
|
marco@16
|
102 <sword:service>http://swordapp.org/sd-iri/e7</sword:service>
|
marco@16
|
103 <sword:service>http://swordapp.org/sd-iri/e8</sword:service>
|
marco@16
|
104 </collection>
|
marco@16
|
105 <collection href="http://swordapp.org/col-iri/46">
|
marco@16
|
106 <atom:title>Collection 46</atom:title>
|
marco@16
|
107 <accept>application/zip</accept>
|
marco@16
|
108 <accept alternate="multipart-related">application/zip</accept>
|
marco@16
|
109 <sword:collectionPolicy>Only Theses</sword:collectionPolicy>
|
marco@16
|
110 <dcterms:abstract>Theses dropbox</dcterms:abstract>
|
marco@16
|
111 <sword:mediation>true</sword:mediation>
|
marco@16
|
112 <sword:treatment>Treatment description</sword:treatment>
|
marco@16
|
113 <sword:acceptPackaging>http://purl.org/net/sword/package/SimpleZip</sword:acceptPackaging>
|
marco@16
|
114 </collection>
|
marco@16
|
115 </workspace>
|
marco@16
|
116 </service>'''
|
marco@16
|
117
|
marco@16
|
118 class TestServiceDocument(TestController):
|
marco@16
|
119 def test_01_blank_init(self):
|
marco@16
|
120 s = ServiceDocument()
|
marco@16
|
121 assert s.version == None
|
marco@16
|
122 assert s.parsed == False
|
marco@16
|
123 assert s.valid == False # Invalid document as should be blank
|
marco@16
|
124
|
marco@16
|
125 def test_02_init_and_load_simple(self):
|
marco@16
|
126 s = ServiceDocument()
|
marco@16
|
127 s.load_document(short_service_doc)
|
marco@16
|
128 assert s.version == "2.0"
|
marco@16
|
129 assert s.valid == True
|
marco@16
|
130 assert s.maxUploadSize == 16777216 # check int()
|
marco@16
|
131
|
marco@16
|
132 def test_03_load_on_init(self):
|
marco@16
|
133 s = ServiceDocument(xml_response = short_service_doc)
|
marco@16
|
134 assert s.version == "2.0"
|
marco@16
|
135 assert s.valid == True
|
marco@16
|
136 assert s.maxUploadSize == 16777216 # check int()
|
marco@16
|
137
|
marco@16
|
138 def test_04_init_and_load_long(self):
|
marco@16
|
139 s = ServiceDocument()
|
marco@16
|
140 s.load_document(long_service_doc)
|
marco@16
|
141 assert s.version == "2.0"
|
marco@16
|
142 assert s.valid == True
|
marco@16
|
143 assert s.maxUploadSize == 16777216 # check int()
|
marco@16
|
144
|
marco@16
|
145 def test_05_long_load_on_init(self):
|
marco@16
|
146 s = ServiceDocument(xml_response = long_service_doc)
|
marco@16
|
147 assert s.version == "2.0"
|
marco@16
|
148 assert s.valid == True
|
marco@16
|
149 assert s.maxUploadSize == 16777216 # check int()
|
marco@16
|
150
|
marco@16
|
151 def test_06_workspaces_short(self):
|
marco@16
|
152 s = ServiceDocument(xml_response = short_service_doc)
|
marco@16
|
153 assert len(s.workspaces) == 1
|
marco@16
|
154 assert s.workspaces[0][0] == "Main Site"
|
marco@16
|
155 assert len(s.workspaces[0][1]) == 1
|
marco@16
|
156
|
marco@16
|
157 def test_07_workspaces_long(self):
|
marco@16
|
158 s = ServiceDocument(xml_response = long_service_doc)
|
marco@16
|
159 assert len(s.workspaces) == 2
|
marco@16
|
160 assert s.workspaces[0][0] == "Main Site"
|
marco@16
|
161 assert s.workspaces[1][0] == "Sub-site"
|
marco@16
|
162 assert len(s.workspaces[1][1]) == 2
|
marco@16
|
163
|
marco@16
|
164 def test_08_collection_information_long(self):
|
marco@16
|
165 s = ServiceDocument(xml_response = long_service_doc)
|
marco@16
|
166 sub_workspace = s.workspaces[1]
|
marco@16
|
167 assert sub_workspace[0] == "Sub-site"
|
marco@16
|
168 sub_collections = sub_workspace[1]
|
marco@16
|
169 for c in sub_collections:
|
marco@16
|
170 if c.title == "Collection 44":
|
marco@16
|
171 assert c.href == "http://swordapp.org/col-iri/44"
|
marco@16
|
172 assert len(c.service) == 4
|
marco@16
|
173 assert c.mediation == True
|
marco@16
|
174 if c.href == "http://swordapp.org/col-iri/46":
|
marco@16
|
175 assert c.title == "Collection 46"
|
marco@16
|
176 assert c.service == None
|
marco@16
|
177 assert c.collectionPolicy == "Only Theses"
|
marco@16
|
178
|
marco@16
|
179 def test_09_accept_information_long(self):
|
marco@16
|
180 s = ServiceDocument(xml_response = long_service_doc)
|
marco@16
|
181 sub_workspace = s.workspaces[1]
|
marco@16
|
182 assert sub_workspace[0] == "Sub-site"
|
marco@16
|
183 sub_collections = sub_workspace[1]
|
marco@16
|
184 for c in sub_collections:
|
marco@16
|
185 if c.title == "Collection 44":
|
marco@16
|
186 assert "*/*" in c.accept
|
marco@16
|
187 if c.href == "http://swordapp.org/col-iri/46":
|
marco@16
|
188 assert "application/zip" in c.accept
|
marco@16
|
189 assert "http://purl.org/net/sword/package/SimpleZip" in c.acceptPackaging
|
marco@16
|
190
|