Projet

Général

Profil

0001-cmis-add-a-test-that-mock-http-requests-39597.patch

Nicolas Roche, 05 mars 2020 09:26

Télécharger (25 ko)

Voir les différences:

Subject: [PATCH] cmis: add a test that mock http requests (#39597)

 tests/data/cmis/cmis1.out.xml | 178 ++++++++++++++++++++++++++++++++++
 tests/data/cmis/cmis2.out.xml |  60 ++++++++++++
 tests/data/cmis/cmis3.in.xml  |  18 ++++
 tests/data/cmis/cmis3.out.xml |  91 +++++++++++++++++
 tests/test_cmis.py            |  61 ++++++++++++
 5 files changed, 408 insertions(+)
 create mode 100644 tests/data/cmis/cmis1.out.xml
 create mode 100644 tests/data/cmis/cmis2.out.xml
 create mode 100644 tests/data/cmis/cmis3.in.xml
 create mode 100644 tests/data/cmis/cmis3.out.xml
tests/data/cmis/cmis1.out.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<app:service xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/" xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/" xmlns:app="http://www.w3.org/2007/app">
3
  <app:workspace>
4
    <atom:title>test</atom:title>
5
    <app:collection href="http://example.com/cmisatom/test/children?id=%40root%40">
6
      <cmisra:collectionType>root</cmisra:collectionType>
7
      <atom:title type="text">Root Collection</atom:title>
8
      <app:accept>application/atom+xml;type=entry</app:accept>
9
      <app:accept>application/cmisatom+xml</app:accept>
10
    </app:collection>
11
    <app:collection href="http://example.com/cmisatom/test/types">
12
      <cmisra:collectionType>types</cmisra:collectionType>
13
      <atom:title type="text">Types Collection</atom:title>
14
      <app:accept/>
15
    </app:collection>
16
    <app:collection href="http://example.com/cmisatom/test/checkedout">
17
      <cmisra:collectionType>checkedout</cmisra:collectionType>
18
      <atom:title type="text">Checked Out Collection</atom:title>
19
      <app:accept>application/cmisatom+xml</app:accept>
20
    </app:collection>
21
    <app:collection href="http://example.com/cmisatom/test/update">
22
      <cmisra:collectionType>update</cmisra:collectionType>
23
      <atom:title type="text">Bulk Update Collection</atom:title>
24
      <app:accept>application/cmisatom+xml</app:accept>
25
    </app:collection>
26
    <cmisra:repositoryInfo>
27
      <cmis:repositoryId>test</cmis:repositoryId>
28
      <cmis:repositoryName>test</cmis:repositoryName>
29
      <cmis:repositoryDescription>test</cmis:repositoryDescription>
30
      <cmis:vendorName>OpenCMIS</cmis:vendorName>
31
      <cmis:productName>OpenCMIS FileShare</cmis:productName>
32
      <cmis:productVersion>1.1.0</cmis:productVersion>
33
      <cmis:rootFolderId>@root@</cmis:rootFolderId>
34
      <cmis:capabilities>
35
        <cmis:capabilityACL>discover</cmis:capabilityACL>
36
        <cmis:capabilityAllVersionsSearchable>false</cmis:capabilityAllVersionsSearchable>
37
        <cmis:capabilityChanges>none</cmis:capabilityChanges>
38
        <cmis:capabilityContentStreamUpdatability>anytime</cmis:capabilityContentStreamUpdatability>
39
        <cmis:capabilityGetDescendants>true</cmis:capabilityGetDescendants>
40
        <cmis:capabilityGetFolderTree>true</cmis:capabilityGetFolderTree>
41
        <cmis:capabilityOrderBy>common</cmis:capabilityOrderBy>
42
        <cmis:capabilityMultifiling>false</cmis:capabilityMultifiling>
43
        <cmis:capabilityPWCSearchable>false</cmis:capabilityPWCSearchable>
44
        <cmis:capabilityPWCUpdatable>false</cmis:capabilityPWCUpdatable>
45
        <cmis:capabilityQuery>none</cmis:capabilityQuery>
46
        <cmis:capabilityRenditions>none</cmis:capabilityRenditions>
47
        <cmis:capabilityUnfiling>false</cmis:capabilityUnfiling>
48
        <cmis:capabilityVersionSpecificFiling>false</cmis:capabilityVersionSpecificFiling>
49
        <cmis:capabilityJoin>none</cmis:capabilityJoin>
50
        <cmis:capabilityCreatablePropertyTypes/>
51
        <cmis:capabilityNewTypeSettableAttributes>
52
          <cmis:id>false</cmis:id>
53
          <cmis:localName>false</cmis:localName>
54
          <cmis:localNamespace>false</cmis:localNamespace>
55
          <cmis:displayName>false</cmis:displayName>
56
          <cmis:queryName>false</cmis:queryName>
57
          <cmis:description>false</cmis:description>
58
          <cmis:creatable>false</cmis:creatable>
59
          <cmis:fileable>false</cmis:fileable>
60
          <cmis:queryable>false</cmis:queryable>
61
          <cmis:fulltextIndexed>false</cmis:fulltextIndexed>
62
          <cmis:includedInSupertypeQuery>false</cmis:includedInSupertypeQuery>
63
          <cmis:controllablePolicy>false</cmis:controllablePolicy>
64
          <cmis:controllableACL>false</cmis:controllableACL>
65
        </cmis:capabilityNewTypeSettableAttributes>
66
      </cmis:capabilities>
67
      <cmis:aclCapability>
68
        <cmis:supportedPermissions>basic</cmis:supportedPermissions>
69
        <cmis:propagation>objectonly</cmis:propagation>
70
        <cmis:permissions>
71
          <cmis:permission>cmis:read</cmis:permission>
72
          <cmis:description>Read</cmis:description>
73
        </cmis:permissions>
74
        <cmis:permissions>
75
          <cmis:permission>cmis:write</cmis:permission>
76
          <cmis:description>Write</cmis:description>
77
        </cmis:permissions>
78
        <cmis:permissions>
79
          <cmis:permission>cmis:all</cmis:permission>
80
          <cmis:description>All</cmis:description>
81
        </cmis:permissions>
82
        <cmis:mapping>
83
          <cmis:key>canCreateDocument.Folder</cmis:key>
84
          <cmis:permission>cmis:read</cmis:permission>
85
        </cmis:mapping>
86
        <cmis:mapping>
87
          <cmis:key>canCreateFolder.Folder</cmis:key>
88
          <cmis:permission>cmis:read</cmis:permission>
89
        </cmis:mapping>
90
        <cmis:mapping>
91
          <cmis:key>canDeleteContent.Document</cmis:key>
92
          <cmis:permission>cmis:write</cmis:permission>
93
        </cmis:mapping>
94
        <cmis:mapping>
95
          <cmis:key>canDelete.Object</cmis:key>
96
          <cmis:permission>cmis:all</cmis:permission>
97
        </cmis:mapping>
98
        <cmis:mapping>
99
          <cmis:key>canDeleteTree.Folder</cmis:key>
100
          <cmis:permission>cmis:all</cmis:permission>
101
        </cmis:mapping>
102
        <cmis:mapping>
103
          <cmis:key>canGetACL.Object</cmis:key>
104
          <cmis:permission>cmis:read</cmis:permission>
105
        </cmis:mapping>
106
        <cmis:mapping>
107
          <cmis:key>canGetAllVersions.VersionSeries</cmis:key>
108
          <cmis:permission>cmis:read</cmis:permission>
109
        </cmis:mapping>
110
        <cmis:mapping>
111
          <cmis:key>canGetChildren.Folder</cmis:key>
112
          <cmis:permission>cmis:read</cmis:permission>
113
        </cmis:mapping>
114
        <cmis:mapping>
115
          <cmis:key>canGetDescendents.Folder</cmis:key>
116
          <cmis:permission>cmis:read</cmis:permission>
117
        </cmis:mapping>
118
        <cmis:mapping>
119
          <cmis:key>canGetFolderParent.Object</cmis:key>
120
          <cmis:permission>cmis:read</cmis:permission>
121
        </cmis:mapping>
122
        <cmis:mapping>
123
          <cmis:key>canGetParents.Folder</cmis:key>
124
          <cmis:permission>cmis:read</cmis:permission>
125
        </cmis:mapping>
126
        <cmis:mapping>
127
          <cmis:key>canGetProperties.Object</cmis:key>
128
          <cmis:permission>cmis:read</cmis:permission>
129
        </cmis:mapping>
130
        <cmis:mapping>
131
          <cmis:key>canMove.Object</cmis:key>
132
          <cmis:permission>cmis:write</cmis:permission>
133
        </cmis:mapping>
134
        <cmis:mapping>
135
          <cmis:key>canMove.Source</cmis:key>
136
          <cmis:permission>cmis:read</cmis:permission>
137
        </cmis:mapping>
138
        <cmis:mapping>
139
          <cmis:key>canMove.Target</cmis:key>
140
          <cmis:permission>cmis:write</cmis:permission>
141
        </cmis:mapping>
142
        <cmis:mapping>
143
          <cmis:key>canSetContent.Document</cmis:key>
144
          <cmis:permission>cmis:write</cmis:permission>
145
        </cmis:mapping>
146
        <cmis:mapping>
147
          <cmis:key>canUpdateProperties.Object</cmis:key>
148
          <cmis:permission>cmis:write</cmis:permission>
149
        </cmis:mapping>
150
        <cmis:mapping>
151
          <cmis:key>canViewContent.Object</cmis:key>
152
          <cmis:permission>cmis:read</cmis:permission>
153
        </cmis:mapping>
154
      </cmis:aclCapability>
155
      <cmis:cmisVersionSupported>1.1</cmis:cmisVersionSupported>
156
      <cmis:thinClientURI/>
157
      <cmis:changesIncomplete>true</cmis:changesIncomplete>
158
    </cmisra:repositoryInfo>
159
    <atom:link rel="http://docs.oasis-open.org/ns/cmis/link/200908/typedescendants" href="http://example.com/cmisatom/test/typedesc" type="application/atom+xml;type=feed"/>
160
    <atom:link rel="http://docs.oasis-open.org/ns/cmis/link/200908/foldertree" href="http://example.com/cmisatom/test/foldertree?id=%40root%40" type="application/cmistree+xml"/>
161
    <atom:link rel="http://docs.oasis-open.org/ns/cmis/link/200908/rootdescendants" href="http://example.com/cmisatom/test/descendants?id=%40root%40" type="application/cmistree+xml" cmisra:id="@root@"/>
162
    <cmisra:uritemplate>
163
      <cmisra:template>http://example.com/cmisatom/test/id?id={id}&amp;filter={filter}&amp;includeAllowableActions={includeAllowableActions}&amp;includeACL={includeACL}&amp;includePolicyIds={includePolicyIds}&amp;includeRelationships={includeRelationships}&amp;renditionFilter={renditionFilter}</cmisra:template>
164
      <cmisra:type>objectbyid</cmisra:type>
165
      <cmisra:mediatype>application/atom+xml;type=entry</cmisra:mediatype>
166
    </cmisra:uritemplate>
167
    <cmisra:uritemplate>
168
      <cmisra:template>http://example.com/cmisatom/test/path?path={path}&amp;filter={filter}&amp;includeAllowableActions={includeAllowableActions}&amp;includeACL={includeACL}&amp;includePolicyIds={includePolicyIds}&amp;includeRelationships={includeRelationships}&amp;renditionFilter={renditionFilter}</cmisra:template>
169
      <cmisra:type>objectbypath</cmisra:type>
170
      <cmisra:mediatype>application/atom+xml;type=entry</cmisra:mediatype>
171
    </cmisra:uritemplate>
172
    <cmisra:uritemplate>
173
      <cmisra:template>http://example.com/cmisatom/test/type?id={id}</cmisra:template>
174
      <cmisra:type>typebyid</cmisra:type>
175
      <cmisra:mediatype>application/atom+xml;type=entry</cmisra:mediatype>
176
    </cmisra:uritemplate>
177
  </app:workspace>
178
</app:service>
tests/data/cmis/cmis2.out.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/" xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/" xmlns:app="http://www.w3.org/2007/app">
3
  <atom:author>
4
    <atom:name>cmisuser</atom:name>
5
  </atom:author>
6
  <atom:id>http://chemistry.apache.org/TDNSbGMzUXRaVzg9</atom:id>
7
  <atom:published>2020-02-05T17:11:28Z</atom:published>
8
  <atom:title>test-eo</atom:title>
9
  <app:edited>2020-02-08T18:55:44Z</app:edited>
10
  <atom:updated>2020-02-08T18:55:44Z</atom:updated>
11
  <cmisra:object>
12
    <cmis:properties>
13
      <cmis:propertyId propertyDefinitionId="cmis:objectId">
14
        <cmis:value>L3Rlc3QtZW8=</cmis:value>
15
      </cmis:propertyId>
16
      <cmis:propertyDateTime propertyDefinitionId="cmis:lastModificationDate">
17
        <cmis:value>2020-02-08T18:55:44Z</cmis:value>
18
      </cmis:propertyDateTime>
19
      <cmis:propertyString propertyDefinitionId="cmis:changeToken"/>
20
      <cmis:propertyString propertyDefinitionId="cmis:description"/>
21
      <cmis:propertyId propertyDefinitionId="cmis:secondaryObjectTypeIds"/>
22
      <cmis:propertyId propertyDefinitionId="cmis:baseTypeId">
23
        <cmis:value>cmis:folder</cmis:value>
24
      </cmis:propertyId>
25
      <cmis:propertyString propertyDefinitionId="cmis:path">
26
        <cmis:value>/test-eo</cmis:value>
27
      </cmis:propertyString>
28
      <cmis:propertyId propertyDefinitionId="cmis:parentId">
29
        <cmis:value>@root@</cmis:value>
30
      </cmis:propertyId>
31
      <cmis:propertyId propertyDefinitionId="cmis:allowedChildObjectTypeIds"/>
32
      <cmis:propertyString propertyDefinitionId="cmis:name">
33
        <cmis:value>test-eo</cmis:value>
34
      </cmis:propertyString>
35
      <cmis:propertyId propertyDefinitionId="cmis:objectTypeId">
36
        <cmis:value>cmis:folder</cmis:value>
37
      </cmis:propertyId>
38
      <cmis:propertyString propertyDefinitionId="cmis:createdBy">
39
        <cmis:value>cmisuser</cmis:value>
40
      </cmis:propertyString>
41
      <cmis:propertyString propertyDefinitionId="cmis:lastModifiedBy">
42
        <cmis:value>cmisuser</cmis:value>
43
      </cmis:propertyString>
44
      <cmis:propertyDateTime propertyDefinitionId="cmis:creationDate">
45
        <cmis:value>2020-02-05T17:11:28Z</cmis:value>
46
      </cmis:propertyDateTime>
47
    </cmis:properties>
48
  </cmisra:object>
49
  <atom:link rel="service" href="http://example.com/cmisatom/test?repositoryId=test" type="application/atomsvc+xml"/>
50
  <atom:link rel="self" href="http://example.com/cmisatom/test/entry?id=L3Rlc3QtZW8%3D" type="application/atom+xml;type=entry" cmisra:id="L3Rlc3QtZW8="/>
51
  <atom:link rel="enclosure" href="http://example.com/cmisatom/test/entry?id=L3Rlc3QtZW8%3D" type="application/atom+xml;type=entry"/>
52
  <atom:link rel="edit" href="http://example.com/cmisatom/test/entry?id=L3Rlc3QtZW8%3D" type="application/atom+xml;type=entry"/>
53
  <atom:link rel="describedby" href="http://example.com/cmisatom/test/type?id=cmis%3Afolder" type="application/atom+xml;type=entry"/>
54
  <atom:link rel="http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions" href="http://example.com/cmisatom/test/allowableactions?id=L3Rlc3QtZW8%3D" type="application/cmisallowableactions+xml"/>
55
  <atom:link rel="up" href="http://example.com/cmisatom/test/parent?id=L3Rlc3QtZW8%3D" type="application/atom+xml;type=entry"/>
56
  <atom:link rel="down" href="http://example.com/cmisatom/test/children?id=L3Rlc3QtZW8%3D" type="application/atom+xml;type=feed"/>
57
  <atom:link rel="down" href="http://example.com/cmisatom/test/descendants?id=L3Rlc3QtZW8%3D" type="application/cmistree+xml"/>
58
  <atom:link rel="http://docs.oasis-open.org/ns/cmis/link/200908/foldertree" href="http://example.com/cmisatom/test/foldertree?id=L3Rlc3QtZW8%3D" type="application/atom+xml;type=feed"/>
59
  <atom:link rel="http://docs.oasis-open.org/ns/cmis/link/200908/acl" href="http://example.com/cmisatom/test/acl?id=L3Rlc3QtZW8%3D" type="application/cmisacl+xml"/>
60
</atom:entry>
tests/data/cmis/cmis3.in.xml
1
<?xml version="1.0" encoding="utf-8"?>
2
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/">
3
  <cmisra:content>
4
    <cmisra:mediatype>image/jpeg</cmisra:mediatype>
5
    <cmisra:base64>c2FsdXQK</cmisra:base64>
6
  </cmisra:content>
7
  <cmisra:object xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/">
8
    <cmis:properties>
9
      <cmis:propertyId propertyDefinitionId="cmis:objectTypeId">
10
        <cmis:value>cmis:document</cmis:value>
11
      </cmis:propertyId>
12
      <cmis:propertyString propertyDefinitionId="cmis:name">
13
        <cmis:value>test2</cmis:value>
14
      </cmis:propertyString>
15
    </cmis:properties>
16
  </cmisra:object>
17
  <title>test2</title>
18
</entry>
tests/data/cmis/cmis3.out.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/" xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/" xmlns:app="http://www.w3.org/2007/app">
3
  <atom:author>
4
    <atom:name>cmisuser</atom:name>
5
  </atom:author>
6
  <atom:id>http://chemistry.apache.org/TDNSbGMzUXRaVzh2ZEdWemREST0=</atom:id>
7
  <atom:published>2020-02-08T19:17:10Z</atom:published>
8
  <atom:title>test2</atom:title>
9
  <app:edited>2020-02-08T19:17:10Z</app:edited>
10
  <atom:updated>2020-02-08T19:17:10Z</atom:updated>
11
  <atom:content src="http://example.com/cmisatom/test/content/test2?id=L3Rlc3QtZW8vdGVzdDI%3D" type="application/octet-stream"/>
12
  <cmisra:object>
13
    <cmis:properties>
14
      <cmis:propertyId propertyDefinitionId="cmis:objectId">
15
        <cmis:value>L3Rlc3QtZW8vdGVzdDI=</cmis:value>
16
      </cmis:propertyId>
17
      <cmis:propertyDateTime propertyDefinitionId="cmis:lastModificationDate">
18
        <cmis:value>2020-02-08T19:17:10Z</cmis:value>
19
      </cmis:propertyDateTime>
20
      <cmis:propertyString propertyDefinitionId="cmis:changeToken"/>
21
      <cmis:propertyString propertyDefinitionId="cmis:description"/>
22
      <cmis:propertyId propertyDefinitionId="cmis:secondaryObjectTypeIds"/>
23
      <cmis:propertyId propertyDefinitionId="cmis:baseTypeId">
24
        <cmis:value>cmis:document</cmis:value>
25
      </cmis:propertyId>
26
      <cmis:propertyBoolean propertyDefinitionId="cmis:isImmutable">
27
        <cmis:value>false</cmis:value>
28
      </cmis:propertyBoolean>
29
      <cmis:propertyBoolean propertyDefinitionId="cmis:isLatestVersion">
30
        <cmis:value>true</cmis:value>
31
      </cmis:propertyBoolean>
32
      <cmis:propertyBoolean propertyDefinitionId="cmis:isMajorVersion">
33
        <cmis:value>true</cmis:value>
34
      </cmis:propertyBoolean>
35
      <cmis:propertyBoolean propertyDefinitionId="cmis:isLatestMajorVersion">
36
        <cmis:value>true</cmis:value>
37
      </cmis:propertyBoolean>
38
      <cmis:propertyString propertyDefinitionId="cmis:versionLabel">
39
        <cmis:value>test2</cmis:value>
40
      </cmis:propertyString>
41
      <cmis:propertyId propertyDefinitionId="cmis:versionSeriesId">
42
        <cmis:value>L3Rlc3QtZW8vdGVzdDI=</cmis:value>
43
      </cmis:propertyId>
44
      <cmis:propertyBoolean propertyDefinitionId="cmis:isVersionSeriesCheckedOut">
45
        <cmis:value>false</cmis:value>
46
      </cmis:propertyBoolean>
47
      <cmis:propertyString propertyDefinitionId="cmis:versionSeriesCheckedOutBy"/>
48
      <cmis:propertyString propertyDefinitionId="cmis:versionSeriesCheckedOutId"/>
49
      <cmis:propertyString propertyDefinitionId="cmis:checkinComment">
50
        <cmis:value/>
51
      </cmis:propertyString>
52
      <cmis:propertyBoolean propertyDefinitionId="cmis:isPrivateWorkingCopy">
53
        <cmis:value>false</cmis:value>
54
      </cmis:propertyBoolean>
55
      <cmis:propertyInteger propertyDefinitionId="cmis:contentStreamLength">
56
        <cmis:value>6</cmis:value>
57
      </cmis:propertyInteger>
58
      <cmis:propertyString propertyDefinitionId="cmis:contentStreamMimeType">
59
        <cmis:value>application/octet-stream</cmis:value>
60
      </cmis:propertyString>
61
      <cmis:propertyString propertyDefinitionId="cmis:contentStreamFileName">
62
        <cmis:value>test2</cmis:value>
63
      </cmis:propertyString>
64
      <cmis:propertyId propertyDefinitionId="cmis:contentStreamId"/>
65
      <cmis:propertyString propertyDefinitionId="cmis:name">
66
        <cmis:value>test2</cmis:value>
67
      </cmis:propertyString>
68
      <cmis:propertyId propertyDefinitionId="cmis:objectTypeId">
69
        <cmis:value>cmis:document</cmis:value>
70
      </cmis:propertyId>
71
      <cmis:propertyString propertyDefinitionId="cmis:createdBy">
72
        <cmis:value>cmisuser</cmis:value>
73
      </cmis:propertyString>
74
      <cmis:propertyString propertyDefinitionId="cmis:lastModifiedBy">
75
        <cmis:value>cmisuser</cmis:value>
76
      </cmis:propertyString>
77
      <cmis:propertyDateTime propertyDefinitionId="cmis:creationDate">
78
        <cmis:value>2020-02-08T19:17:10Z</cmis:value>
79
      </cmis:propertyDateTime>
80
    </cmis:properties>
81
  </cmisra:object>
82
  <atom:link rel="service" href="http://example.com/cmisatom/test?repositoryId=test" type="application/atomsvc+xml"/>
83
  <atom:link rel="self" href="http://example.com/cmisatom/test/entry?id=L3Rlc3QtZW8vdGVzdDI%3D" type="application/atom+xml;type=entry" cmisra:id="L3Rlc3QtZW8vdGVzdDI="/>
84
  <atom:link rel="enclosure" href="http://example.com/cmisatom/test/entry?id=L3Rlc3QtZW8vdGVzdDI%3D" type="application/atom+xml;type=entry"/>
85
  <atom:link rel="edit" href="http://example.com/cmisatom/test/entry?id=L3Rlc3QtZW8vdGVzdDI%3D" type="application/atom+xml;type=entry"/>
86
  <atom:link rel="describedby" href="http://example.com/cmisatom/test/type?id=cmis%3Adocument" type="application/atom+xml;type=entry"/>
87
  <atom:link rel="http://docs.oasis-open.org/ns/cmis/link/200908/allowableactions" href="http://example.com/cmisatom/test/allowableactions?id=L3Rlc3QtZW8vdGVzdDI%3D" type="application/cmisallowableactions+xml"/>
88
  <atom:link rel="up" href="http://example.com/cmisatom/test/parents?id=L3Rlc3QtZW8vdGVzdDI%3D" type="application/atom+xml;type=feed"/>
89
  <atom:link rel="edit-media" href="http://example.com/cmisatom/test/content?id=L3Rlc3QtZW8vdGVzdDI%3D" type="application/octet-stream"/>
90
  <atom:link rel="http://docs.oasis-open.org/ns/cmis/link/200908/acl" href="http://example.com/cmisatom/test/acl?id=L3Rlc3QtZW8vdGVzdDI%3D" type="application/cmisacl+xml"/>
91
</atom:entry>
tests/test_cmis.py
1 1
import base64
2 2
import httplib2
3
import xml.etree.ElementTree as ET
4
import mock
5
import os
3 6
import re
4 7

  
5 8
from cmislib import CmisClient
6 9
from cmislib.exceptions import CmisException
7 10
from cmislib.exceptions import ObjectNotFoundException
8 11
from cmislib.exceptions import PermissionDeniedException
9 12
from cmislib.exceptions import UpdateConflictException
10 13
from cmislib.exceptions import InvalidArgumentException
11 14
from django.contrib.contenttypes.models import ContentType
15
from django.core.urlresolvers import reverse
12 16
from django.utils.encoding import force_bytes, force_text
13 17
from django.utils.six.moves.urllib import error as urllib2
14 18
from mock import call, Mock
15 19
import py
16 20
import pytest
17 21

  
18 22
from passerelle.base.models import ApiUser, AccessRight
19 23
from passerelle.apps.cmis.models import CmisConnector
......
462 466
    resp = resp.click(children[0].id)
463 467
    assert "No more children." in resp.text
464 468

  
465 469
    resp = resp.click("Back to base types list")
466 470
    resp = resp.click(root_type2.id)
467 471
    assert "No more children." in resp.text
468 472

  
469 473
    resp = app.get('/manage/cmis/slug-cmis/type?id=wrong', status=404)
474

  
475

  
476
@mock.patch('httplib2.Http.request')
477
def test_raw_uploadfile(mocked_request, app, setup):
478
    """ Simulate the bellow bash query :
479
    $ http https://passerelle.dev.publik.love/cmis/ged/uploadfile \
480
           file:='{"filename": "test2", "content": "c2FsdXQK"}' path=/test-eo
481
    """
482
    file_name = "test2"
483
    file_content = 'salut\n'
484
    path = "/test-eo"
485
    url = reverse('generic-endpoint', kwargs={'connector': 'cmis',
486
                  'endpoint': 'uploadfile', 'slug': setup.slug})
487

  
488
    def cmis_mocked_request(uri, method="GET", body=None, **kwargs):
489
        """simulate the 3 (ordered) HTTP queries involved"""
490
        response = {'status': '200'}
491
        if method == 'GET' and uri == 'http://example.com/cmisatom':
492
            content = open('%s/tests/data/cmis/cmis1.out.xml' % os.getcwd(), 'rb').read()
493
        elif method == 'GET' and uri == 'http://example.com/cmisatom/test/path?path=/test-eo&filter=&includeAllowableActions=false&includeACL=false&includePolicyIds=false&includeRelationships=&renditionFilter=':
494
            content = open('%s/tests/data/cmis/cmis2.out.xml' % os.getcwd(), 'rb').read()
495
        elif method == 'POST' and uri == 'http://example.com/cmisatom/test/children?id=L3Rlc3QtZW8%3D':
496
            expected_input = open('%s/tests/data/cmis/cmis3.in.xml' % os.getcwd(), 'r').read()
497
            expected_input = expected_input.replace('\n', '')
498
            expected_input = re.sub('> *<', '><', expected_input)
499
            input1 = ET.tostring(ET.XML(expected_input))
500

  
501
            # reorder properties
502
            input2 = ET.XML(body)
503
            objects = input2.find('{http://docs.oasis-open.org/ns/cmis/restatom/200908/}object')
504
            properties = objects.find('{http://docs.oasis-open.org/ns/cmis/core/200908/}properties')
505
            data = []
506
            for elem in properties:
507
                key = elem.tag
508
                data.append((key, elem))
509
            data.sort()
510
            properties[:] = [item[-1] for item in data]
511
            input2 = ET.tostring(input2)
512

  
513
            if input1 != input2:
514
                raise Exception('expect [[%s]] but get [[%s]]' % (body, expected_input))
515
            content = open('%s/tests/data/cmis/cmis3.out.xml' % os.getcwd(), 'rb').read()
516
        else:
517
            raise Exception('my fault error, url is not yet mocked: %s' % uri)
518
        return (response, content)
519

  
520
    mocked_request.side_effect = cmis_mocked_request
521
    params = {
522
        "path": path,
523
        "file": {"filename": file_name,
524
                 "content": b64encode(file_content),
525
                 "content_type": "image/jpeg"}}
526
    response = app.post_json(url, params=params)
527
    json_result = response.json
528
    assert json_result['err'] == 0
529
    assert json_result['data']['properties']['cmis:objectTypeId'] == "cmis:document"
530
    assert json_result['data']['properties']['cmis:name'] == file_name
470
-