Projet

Général

Profil

0001-astregs-add-endpoint-to-create-grant-demands-indicat.patch

Serghei Mihai, 05 août 2019 16:37

Télécharger (13,6 ko)

Voir les différences:

Subject: [PATCH] astregs: add endpoint to create grant demands indicators
 (#34868)

 passerelle/apps/astregs/models.py             |  44 ++++
 tests/data/astregs/DossierIndicateur.wsdl     | 228 ++++++++++++++++++
 .../DossierIndicateurCreationResponse.xml     |   1 +
 tests/test_astregs.py                         |  24 ++
 4 files changed, 297 insertions(+)
 create mode 100644 tests/data/astregs/DossierIndicateur.wsdl
 create mode 100644 tests/data/astregs/DossierIndicateurCreationResponse.xml
passerelle/apps/astregs/models.py
231 231
    }
232 232
}
233 233

  
234
INDANA_SCHEMA = {
235
    "$schema": "http://json-schema.org/draft-03/schema#",
236
    "title": "AstreGS INDANA indicator",
237
    "description": "",
238
    "type": "object",
239
    "properties": {
240
        "CodeDossier": {
241
            "type": "string",
242
            "required": True
243
        },
244
        "CodeInd_1": {
245
            "type": "string",
246
            "required": True
247
        },
248
        "AnneeInd_1": {
249
            "type": "string",
250
            "required": True
251
        },
252
        "ValInd_1": {
253
            "type": "string",
254
            "required": True
255
        },
256
        "IndAide": {
257
            "type": "string",
258
            "required": False
259
        }
260
    }
261
}
262

  
234 263

  
235 264
class AstreGS(BaseResource):
236 265
    wsdl_base_url = models.URLField(_('Webservices base URL'))
......
523 552
        )
524 553
        return {'data': serialize_object(r)}
525 554

  
555
    @endpoint(name='create-indana-indicator', perm='can_access',
556
              post={'description': _('Create indana indicator'),
557
                    'request_body': {
558
                        'schema': {
559
                            'application/json': INDANA_SCHEMA
560
                        }
561
                    }
562
              }
563
    )
564
    def create_indana_indicator(self, request, post_data):
565
        r = self.call('DossierIndicateur', 'Creation',
566
                      DossierIndicateur=post_data
567
        )
568
        return {'data': serialize_object(r)}
569

  
526 570

  
527 571
class Link(models.Model):
528 572
    resource = models.ForeignKey(AstreGS)
tests/data/astregs/DossierIndicateur.wsdl
1
<?xml version="1.0" encoding="UTF-8"?>
2
<wsdl:definitions name="DossierIndicateur" targetNamespace="http://gfi.astre.webservices/gad/dossierindicateur" xmlns:impl="http://gfi.astre.webservices/gad/dossierindicateur" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:intf="http://gfi.astre.webservices/gad/dossierindicateur">
3
  <wsdl:types>
4
    <schema elementFormDefault="qualified" targetNamespace="http://gfi.astre.webservices/gad/dossierindicateur" xmlns="http://www.w3.org/2001/XMLSchema">
5
				<!--  request et response -->
6
			<complexType name="Authentification">
7
				<sequence>
8
					<element name="USERNOM" type="string"/>
9
					<element name="USERPWD" type="string"/>
10
				</sequence>
11
			</complexType>
12
			<complexType name="Contexte">
13
				<sequence>
14
					<element name="Organisme" type="string"/>
15
					<element name="Budget" type="string"/>
16
					<element name="Exercice" type="string"/>
17
				</sequence>
18
			</complexType>
19
			<complexType name="DossierIndicateurRequest">
20
				<sequence>
21
					<element name="Authentification" type="impl:Authentification"/>
22
					<element name="Contexte" type="impl:Contexte"/>
23
					<element name="DossierIndicateur" type="impl:DossierIndicateur"/>
24
				</sequence>
25
			</complexType>
26
			<complexType name="DossierIndicateurResponse">
27
				<sequence>
28
					<element name="DossierIndicateurReturn" type="impl:DossierIndicateur"/>
29
				</sequence>
30
			</complexType>
31
			<complexType name="DossierIndicateur">
32
				<sequence>
33
					<element name="CodeDossier" nillable="true" type="xsd:string"/>
34
					<element name="CodeInd_1" nillable="true" type="xsd:string"/>
35
					<element name="AnneeInd_1" nillable="true" type="xsd:string"/>
36
					<element name="ValInd_1" nillable="true" type="xsd:string"/>
37
					<element name="IndAide" nillable="true" type="xsd:string"/>
38
				</sequence>
39
			</complexType>
40
			<complexType name="DossierIndicateur_Cle">
41
				<sequence>
42
					<element name="CodeDossier" nillable="true" type="xsd:string"/>
43
					<element name="CodeInd_1" nillable="true" type="xsd:string"/>
44
					<element name="AnneeInd_1" nillable="true" type="xsd:string"/>
45
				</sequence>
46
			</complexType>
47
			<complexType name="DossierIndicateurRequest_Cles">
48
				<sequence>
49
					<element name="Authentification" type="impl:Authentification"/>
50
					<element name="Contexte" type="impl:Contexte"/>
51
					<element name="DossierIndicateurCle" type="impl:DossierIndicateur_Cle"/>
52
				</sequence>
53
			</complexType>
54
			<element name="creation">
55
				<complexType>
56
					<sequence>
57
						<element name="request" type="impl:DossierIndicateurRequest"/>
58
					</sequence>
59
				</complexType>
60
			</element>
61
			<element name="creationResponse">
62
				<complexType>
63
					<sequence>
64
						<element name="response" type="impl:DossierIndicateurResponse"/>
65
					</sequence>
66
				</complexType>
67
			</element>
68
			<element name="modification">
69
				<complexType>
70
					<sequence>
71
						<element name="request" type="impl:DossierIndicateurRequest"/>
72
					</sequence>
73
				</complexType>
74
			</element>
75
			<element name="modificationResponse">
76
				<complexType>
77
					<sequence>
78
						<element name="response" type="impl:DossierIndicateurResponse"/>
79
					</sequence>
80
				</complexType>
81
			</element>
82
			<element name="suppression">
83
				<complexType>
84
					<sequence>
85
						<element name="request" type="impl:DossierIndicateurRequest_Cles"/>
86
					</sequence>
87
				</complexType>
88
			</element>
89
			<element name="suppressionResponse">
90
				<complexType>
91
					<sequence>
92
						<element name="response" type="impl:DossierIndicateurResponse"/>
93
					</sequence>
94
				</complexType>
95
			</element>
96
			<element name="chargement">
97
				<complexType>
98
					<sequence>
99
						<element name="request" type="impl:DossierIndicateurRequest_Cles"/>
100
					</sequence>
101
				</complexType>
102
			</element>
103
			<element name="chargementResponse">
104
				<complexType>
105
					<sequence>
106
						<element name="response" type="impl:DossierIndicateurResponse"/>
107
					</sequence>
108
				</complexType>
109
			</element>
110
		</schema>
111
  </wsdl:types>
112
  <wsdl:message name="chargementResponse">
113
    <wsdl:part name="response" element="impl:chargementResponse">
114
    </wsdl:part>
115
  </wsdl:message>
116
  <wsdl:message name="creationResponse">
117
    <wsdl:part name="response" element="impl:creationResponse">
118
    </wsdl:part>
119
  </wsdl:message>
120
  <wsdl:message name="modificationRequest">
121
    <wsdl:part name="request" element="impl:modification">
122
    </wsdl:part>
123
  </wsdl:message>
124
  <wsdl:message name="suppressionResponse">
125
    <wsdl:part name="response" element="impl:suppressionResponse">
126
    </wsdl:part>
127
  </wsdl:message>
128
  <wsdl:message name="creationRequest">
129
    <wsdl:part name="request" element="impl:creation">
130
    </wsdl:part>
131
  </wsdl:message>
132
  <wsdl:message name="chargementRequest">
133
    <wsdl:part name="request" element="impl:chargement">
134
    </wsdl:part>
135
  </wsdl:message>
136
  <wsdl:message name="suppressionRequest">
137
    <wsdl:part name="request" element="impl:suppression">
138
    </wsdl:part>
139
  </wsdl:message>
140
  <wsdl:message name="modificationResponse">
141
    <wsdl:part name="response" element="impl:modificationResponse">
142
    </wsdl:part>
143
  </wsdl:message>
144
  <wsdl:portType name="DossierIndicateur">
145
<wsdl:documentation>Web service de gestion des indicateurs rattachés à un dossier Astre GS</wsdl:documentation>
146
    <wsdl:operation name="Modification">
147
<wsdl:documentation>
148
				Les champs CodeDossier, CodeInd_1 et AnneeInd_1 sont obligatoires.
149
			</wsdl:documentation>
150
      <wsdl:input name="modificationRequest" message="impl:modificationRequest">
151
    </wsdl:input>
152
      <wsdl:output name="modificationResponse" message="impl:modificationResponse">
153
    </wsdl:output>
154
    </wsdl:operation>
155
    <wsdl:operation name="Chargement">
156
<wsdl:documentation>
157
                Les champs CodeDossier, CodeInd_1 et AnneeInd_1 sont obligatoires.
158
                Lorsque le champ IndAide vaut Oui, l'indicateur ne peut pas être supprimé.
159
			</wsdl:documentation>
160
      <wsdl:input name="chargementRequest" message="impl:chargementRequest">
161
    </wsdl:input>
162
      <wsdl:output name="chargementResponse" message="impl:chargementResponse">
163
    </wsdl:output>
164
    </wsdl:operation>
165
    <wsdl:operation name="Creation">
166
<wsdl:documentation>
167
                Les champs CodeDossier, CodeInd_1 et AnneeInd_1 sont obligatoires.
168
			</wsdl:documentation>
169
      <wsdl:input name="creationRequest" message="impl:creationRequest">
170
    </wsdl:input>
171
      <wsdl:output name="creationResponse" message="impl:creationResponse">
172
    </wsdl:output>
173
    </wsdl:operation>
174
    <wsdl:operation name="Suppression">
175
<wsdl:documentation>
176
                Les champs CodeDossier, CodeInd_1 et AnneeInd_1 sont obligatoires.
177
			</wsdl:documentation>
178
      <wsdl:input name="suppressionRequest" message="impl:suppressionRequest">
179
    </wsdl:input>
180
      <wsdl:output name="suppressionResponse" message="impl:suppressionResponse">
181
    </wsdl:output>
182
    </wsdl:operation>
183
  </wsdl:portType>
184
  <wsdl:binding name="DossierIndicateurSoapBinding" type="impl:DossierIndicateur">
185
    <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
186
    <wsdl:operation name="Modification">
187
      <wsdlsoap:operation soapAction=""/>
188
      <wsdl:input name="modificationRequest">
189
        <wsdlsoap:body use="literal"/>
190
      </wsdl:input>
191
      <wsdl:output name="modificationResponse">
192
        <wsdlsoap:body use="literal"/>
193
      </wsdl:output>
194
    </wsdl:operation>
195
    <wsdl:operation name="Suppression">
196
      <wsdlsoap:operation soapAction=""/>
197
      <wsdl:input name="suppressionRequest">
198
        <wsdlsoap:body use="literal"/>
199
      </wsdl:input>
200
      <wsdl:output name="suppressionResponse">
201
        <wsdlsoap:body use="literal"/>
202
      </wsdl:output>
203
    </wsdl:operation>
204
    <wsdl:operation name="Creation">
205
      <wsdlsoap:operation soapAction=""/>
206
      <wsdl:input name="creationRequest">
207
        <wsdlsoap:body use="literal"/>
208
      </wsdl:input>
209
      <wsdl:output name="creationResponse">
210
        <wsdlsoap:body use="literal"/>
211
      </wsdl:output>
212
    </wsdl:operation>
213
    <wsdl:operation name="Chargement">
214
      <wsdlsoap:operation soapAction=""/>
215
      <wsdl:input name="chargementRequest">
216
        <wsdlsoap:body use="literal"/>
217
      </wsdl:input>
218
      <wsdl:output name="chargementResponse">
219
        <wsdlsoap:body use="literal"/>
220
      </wsdl:output>
221
    </wsdl:operation>
222
  </wsdl:binding>
223
  <wsdl:service name="DossierIndicateur">
224
    <wsdl:port name="DossierIndicateur" binding="impl:DossierIndicateurSoapBinding">
225
      <wsdlsoap:address location="http://10.1.20.153:28001/axis2/services/DossierIndicateur/"/>
226
    </wsdl:port>
227
  </wsdl:service>
228
</wsdl:definitions>
tests/data/astregs/DossierIndicateurCreationResponse.xml
1
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns1:creationResponse xmlns:ns1="http://gfi.astre.webservices/gad/dossierindicateur"><ns1:response><ns1:DossierIndicateurReturn><ns1:CodeDossier>2019_06407</ns1:CodeDossier><ns1:CodeInd_1>501</ns1:CodeInd_1><ns1:AnneeInd_1>2019</ns1:AnneeInd_1><ns1:ValInd_1>O</ns1:ValInd_1><ns1:IndAide>Non</ns1:IndAide></ns1:DossierIndicateurReturn></ns1:response></ns1:creationResponse></soapenv:Body></soapenv:Envelope>
tests/test_astregs.py
386 386
    assert data['NomTiersDem'] == 'My Tiers'
387 387
    assert data['CodeStatut'] == 'ENR'
388 388
    assert data['DateCreation'] == '11/07/2019'
389

  
390

  
391
@mock.patch('passerelle.utils.Request.get')
392
@mock.patch('passerelle.utils.Request.post')
393
def test_create_indana_indicator(mocked_post, mocked_get, connector, app):
394
    mocked_get.return_value = mock.Mock(content=get_xml_file('DossierIndicateur.wsdl'))
395
    mocked_post.return_value = mock.Mock(content=get_xml_file('DossierIndicateurCreationResponse.xml'),
396
                                         headers={'Content-Type': 'text/xml'},
397
                                         status_code=200)
398
    payload = {
399
        'CodeDossier': '2019_06407',
400
        'CodeInd_1': '501',
401
        'AnneeInd_1': '2019',
402
        'ValInd_1': 'O'
403
    }
404
    resp = app.post_json('/astregs/test/create-indana-indicator', params=payload)
405
    assert resp.json['err'] == 0
406
    assert resp.json['data']
407
    data = resp.json['data']
408
    assert data['CodeDossier'] == '2019_06407'
409
    assert data['CodeInd_1'] == '501'
410
    assert data['AnneeInd_1'] == '2019'
411
    assert data['ValInd_1'] == 'O'
412
    assert data['IndAide'] == 'Non'
389
-