restful-capabilities 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (20) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +111 -0
  3. data/bin/razorrisk-microservice-capabilities +57 -0
  4. data/lib/razor_risk/cassini/applications/microservices/restful/capabilities/app.rb +306 -0
  5. data/lib/razor_risk/cassini/applications/microservices/restful/capabilities/version.rb +43 -0
  6. data/lib/razor_risk/cassini/applications/microservices/restful/capabilities.rb +17 -0
  7. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/data_subject_get.rb +65 -0
  8. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/data_subjects_get.rb +59 -0
  9. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/get_handler_mixin.rb +159 -0
  10. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/group_get.rb +65 -0
  11. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/group_users_get.rb +65 -0
  12. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/groups_get.rb +59 -0
  13. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/subject_get.rb +65 -0
  14. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/subjects_get.rb +59 -0
  15. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/user_get.rb +65 -0
  16. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities/users_get.rb +59 -0
  17. data/lib/razor_risk/cassini/applications/route_verb_adaptors/capabilities.rb +24 -0
  18. data/test/unit/adapters/tc_get_handler_mixin.rb +342 -0
  19. data/test/unit/microservice/tc_app.rb +765 -0
  20. metadata +254 -0
@@ -0,0 +1,765 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ #############################################################################
5
+ #
6
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
7
+ #
8
+ #############################################################################
9
+
10
+ $:.unshift File.join(File.dirname(__FILE__), *(['..'] * 3), 'lib')
11
+
12
+ ENV['APP_ENV'] = 'test'
13
+ ENV['RZ_EXPOSE_MICROSERVICE_EXCEPTIONS'] = 'true'
14
+
15
+ # ##########################################################
16
+ # requires
17
+
18
+ require 'razor_risk/cassini/testing/suppress_pantheios_logging' unless $DEBUG
19
+
20
+ require 'razor_risk/cassini/applications/microservices/restful/capabilities/app'
21
+ require 'razor_risk/razor/connectivity/test_doubles/razor_requester/raises_on_send'
22
+ require 'razor_risk/razor/connectivity/test_doubles/razor_requester/returns_given_response'
23
+ require 'razor_risk/razor/connectivity/razor_3/response'
24
+
25
+ require 'rack/test'
26
+ require 'test/unit'
27
+
28
+ # ##########################################################
29
+ # Tests
30
+
31
+ class TestCapabilitiesApp < Test::Unit::TestCase
32
+
33
+ include ::Rack::Test::Methods
34
+
35
+ include ::RazorRisk::Cassini::Applications::Microservices::RESTful
36
+ include ::RazorRisk::Razor::Connectivity::TestDoubles::RazorRequester
37
+ include ::RazorRisk::Razor::Connectivity::Razor3
38
+ include ::RazorRisk::Razor::Connectivity::EntityConnectors::Exceptions
39
+
40
+ RazorEnv = 'env'
41
+
42
+ def app
43
+ Capabilities::CapabilitiesApp
44
+ end
45
+
46
+ def set_razor_response body, **options
47
+
48
+ doc = ::Nokogiri::XML::Builder.new do |xml|
49
+ xml.razorOutbound(
50
+ environment: RazorEnv,
51
+ request: 'select',
52
+ server: 'DataServer',
53
+ ) do
54
+ xml.requestReceivedTime '2020-09-09 14:20:33.844'
55
+ xml.responseSentTime '2019-09-09 14:20:33.911'
56
+ xml.responseReceivedTime '2019-09-09 14:20:33.917'
57
+ xml.returnCode (options[:failed] ? 'nack' : 'ack')
58
+ xml.parent << ::Nokogiri.XML(body).root
59
+ end
60
+ end.doc
61
+
62
+ rsp = Response.new(doc)
63
+ rr = ReturnsGivenResponse.new('conf', RazorEnv, given_response: rsp)
64
+
65
+ app.on_init_service(
66
+ razor_requester: rr,
67
+ request_options: options[:request_options],
68
+ )
69
+ end
70
+
71
+ def configure_app **opts
72
+ opts = {
73
+ host: 'localhost',
74
+ port: 5679,
75
+ authentication_scheme: 'none',
76
+ executable: 'abc',
77
+ razor_requester: nil,
78
+ }.merge(opts)
79
+
80
+ app.init_service(**opts)
81
+ end
82
+
83
+ def setup
84
+ configure_app
85
+ end
86
+ end
87
+
88
+ class TestCommon < TestCapabilitiesApp
89
+
90
+ # TODO: HEAD does the full razor request as if it is a GET, but returns
91
+ # empty. This is not ok and it must be changed not do the razor request.
92
+
93
+ # TODO: Currently cannot mock raising UnexpectedServerResponseException
94
+ # as due to restrictuions in RaisesOnSend exception must be a class.
95
+
96
+ Routes = {
97
+ 'groups' => [ '/groups' ],
98
+ 'group' => [ '/groups/id' ],
99
+ 'users' => [ '/users' ],
100
+ 'user' => [ '/users/-/id' ],
101
+ 'group_users' => [ '/users/group_id' ],
102
+ 'subjects' => [ '/subjects' ],
103
+ 'subject' => [ '/subjects/id' ],
104
+ 'data_subjects' => [ '/data-subjects' ],
105
+ 'data_subject' => [ '/data-subjects/id' ],
106
+ }
107
+ end
108
+
109
+ class TestInvalidVerbs < TestCommon
110
+
111
+ InvalidVerbs = [ :post, :put, :delete, :options ]
112
+
113
+ InvalidVerbs.each do |verb|
114
+ Routes.each do |name, args|
115
+ define_method "test_#{verb}_#{name}" do
116
+ self.send(verb, *args)
117
+ assert_false last_response.ok?
118
+ assert_equal 404, last_response.status
119
+ assert_equal(
120
+ "'#{args.first}' [#{verb.to_s.upcase}] not found",
121
+ last_response.body
122
+ )
123
+ end
124
+ end
125
+ end
126
+ end
127
+
128
+ class TestHeaders < TestCommon
129
+
130
+ Routes.each do |name, args|
131
+ define_method "test_#{name}_invalid_accept_type" do
132
+ set_razor_response('<body/>')
133
+
134
+ header 'Accept', 'image/png'
135
+ get(*args)
136
+
137
+ assert_false last_response.ok?, last_response.body
138
+ assert_equal 406, last_response.status
139
+ assert_match(/invalid accept type/, last_response.body)
140
+ end
141
+
142
+ define_method "test_#{name}_invalid_accept_types" do
143
+ set_razor_response('<body/>')
144
+
145
+ header 'Accept', [ 'image/png', 'application/pdf' ]
146
+ get(*args)
147
+
148
+ assert_false last_response.ok?, last_response.body
149
+ assert_equal 406, last_response.status
150
+ assert_match(/invalid accept type/, last_response.body)
151
+ end
152
+
153
+ define_method "test_#{name}_valid_accept_type" do
154
+
155
+ set_razor_response(
156
+ '<body/>',
157
+ request_options: { validate: false }
158
+ )
159
+
160
+ header 'Accept', 'application/xml'
161
+ get(*args)
162
+
163
+ assert last_response.ok?, last_response.body
164
+ assert_equal 200, last_response.status
165
+ assert_match(
166
+ /application\/xml/,
167
+ last_response.headers['Content-Type']
168
+ )
169
+ end
170
+
171
+ define_method "test_#{name}_valid_accept_types" do
172
+
173
+ set_razor_response(
174
+ '<body/>',
175
+ request_options: { validate: false }
176
+ )
177
+
178
+ header 'Accept', [ 'application/json', 'application/xml' ]
179
+ get(*args)
180
+
181
+ assert last_response.ok?, last_response.body
182
+ assert_equal 200, last_response.status
183
+ assert_match(
184
+ /application\/xml/,
185
+ last_response.headers['Content-Type']
186
+ )
187
+ end
188
+
189
+ define_method "test_#{name}_mixed_accept_types" do
190
+
191
+ set_razor_response(
192
+ '<body/>',
193
+ request_options: { validate: false }
194
+ )
195
+
196
+ header 'Accept', [ 'application/pdf', 'application/xml' ]
197
+ get(*args)
198
+
199
+ assert last_response.ok?, last_response.body
200
+ assert_equal 200, last_response.status
201
+ assert_match(
202
+ /application\/xml/,
203
+ last_response.headers['Content-Type']
204
+ )
205
+ end
206
+
207
+ define_method "test_#{name}_application_xml_accept_types" do
208
+
209
+ set_razor_response(
210
+ '<body/>',
211
+ request_options: { validate: false }
212
+ )
213
+
214
+ header 'Accept', 'application/xml'
215
+ get(*args)
216
+
217
+ assert last_response.ok?, last_response.body
218
+ assert_equal 200, last_response.status
219
+ assert_match(
220
+ /application\/xml/,
221
+ last_response.headers['Content-Type']
222
+ )
223
+ assert_equal '<body/>', last_response.body
224
+ end
225
+
226
+ define_method "test_#{name}_text_xml_accept_types" do
227
+
228
+ set_razor_response(
229
+ '<body/>',
230
+ request_options: { validate: false }
231
+ )
232
+
233
+ header 'Accept', 'text/xml'
234
+ get(*args)
235
+
236
+ assert last_response.ok?, last_response.body
237
+ assert_equal 200, last_response.status
238
+ assert_match(
239
+ /text\/xml/,
240
+ last_response.headers['Content-Type']
241
+ )
242
+ assert_equal '<body/>', last_response.body
243
+ end
244
+
245
+ define_method "test_#{name}_application_json_accept_types" do
246
+
247
+ set_razor_response(
248
+ '<body/>',
249
+ request_options: { validate: false }
250
+ )
251
+
252
+ header 'Accept', 'application/json'
253
+ get(*args)
254
+
255
+ assert last_response.ok?, last_response.body
256
+ assert_equal 200, last_response.status
257
+ assert_match(
258
+ /application\/json/,
259
+ last_response.headers['Content-Type']
260
+ )
261
+ assert_equal '{"body":[]}', last_response.body
262
+ end
263
+ end
264
+ end
265
+
266
+ class TestJSONConversion < TestCommon
267
+
268
+ Routes.each do |name, args|
269
+
270
+ define_method "test_#{name}_json_uses_gdata_scheme" do
271
+
272
+ doc = ::Nokogiri::XML::Builder.new do |xml|
273
+ xml.body do
274
+ xml.group 'value', id: 'group 1'
275
+ xml.group id: 'group 2'
276
+ end
277
+ end.doc.root.to_xml
278
+ set_razor_response(doc, request_options: { validate: false })
279
+
280
+ exp_doc = {
281
+ 'body' => {
282
+ 'group' => [
283
+ { '$t' => 'value', 'id' => 'group 1' },
284
+ { 'id' => 'group 2' }
285
+ ]
286
+ }
287
+ }.to_json
288
+
289
+ header 'Accept', 'application/json'
290
+ get(*args)
291
+
292
+ assert last_response.ok?, last_response.body
293
+ assert_equal 200, last_response.status
294
+ assert_match(
295
+ /application\/json/,
296
+ last_response.headers['Content-Type']
297
+ )
298
+ assert_equal(
299
+ exp_doc,
300
+ last_response.body
301
+ )
302
+ end
303
+ end
304
+ end
305
+
306
+ class TestErrorHandling < TestCommon
307
+
308
+ Routes.each do |name, args|
309
+
310
+ define_method "test_#{name}_RZ0011_error" do
311
+ doc = ::Nokogiri::XML::Builder.new do |xml|
312
+ xml.errors do
313
+ xml.error do
314
+ xml.code 'RZ0011'
315
+ xml.message 'This failed'
316
+ xml.details 'This failed'
317
+ end
318
+ end
319
+ end.doc.root.to_xml
320
+ set_razor_response doc, failed: true
321
+
322
+ get(*args)
323
+
324
+ assert_false last_response.ok?
325
+ assert_equal 404, last_response.status
326
+ assert_equal('This failed: This failed', last_response.body)
327
+ end
328
+
329
+ define_method "test_#{name}_razor_error" do
330
+ doc = ::Nokogiri::XML::Builder.new do |xml|
331
+ xml.body
332
+ end.doc.root.to_xml
333
+ set_razor_response doc, failed: true
334
+
335
+ get(*args)
336
+
337
+ assert_false last_response.ok?
338
+ assert_equal 500, last_response.status
339
+ assert_equal('Server Error', last_response.body)
340
+ end
341
+
342
+ define_method "test_#{name}_unknown_error" do
343
+
344
+ doc = '<body/>'
345
+ set_razor_response doc, failed: true
346
+
347
+ get(*args)
348
+
349
+ assert_false last_response.ok?
350
+ assert_equal 500, last_response.status
351
+ assert_equal('Server Error', last_response.body)
352
+ end
353
+ end
354
+ end
355
+
356
+ class TestGroups < TestCapabilitiesApp
357
+
358
+ def test_validates_xml
359
+
360
+ doc = '<body/>'
361
+ set_razor_response(doc)
362
+
363
+ get '/groups'
364
+
365
+ assert_false last_response.ok?, last_response.body
366
+ assert_equal 404, last_response.status
367
+ assert_equal('Capabilities not found', last_response.body)
368
+ end
369
+
370
+ def test_get
371
+
372
+ doc = ::Nokogiri::XML::Builder.new do |xml|
373
+ xml.body do
374
+ xml.group id: 'group 1'
375
+ xml.group id: 'group 2'
376
+ end
377
+ end.doc.root.to_xml
378
+ set_razor_response(doc)
379
+
380
+ get '/groups'
381
+ assert last_response.ok?
382
+ assert_equal 200, last_response.status
383
+ assert_equal doc, last_response.body
384
+ end
385
+ end
386
+
387
+ class TestGroup < TestCapabilitiesApp
388
+
389
+ def test_validates_xml
390
+
391
+ doc = ::Nokogiri::XML::Builder.new do |xml|
392
+ xml.body do
393
+ xml.capability id: 'cap 1'
394
+ xml.capability id: 'cap 2'
395
+ end
396
+ end.doc.root.to_xml
397
+ set_razor_response(doc)
398
+
399
+ get '/groups/id'
400
+
401
+ assert_false last_response.ok?, last_response.body
402
+ assert_equal 404, last_response.status
403
+ assert_equal('Capabilities not found', last_response.body)
404
+ end
405
+
406
+ def test_get
407
+
408
+ doc = ::Nokogiri::XML::Builder.new do |xml|
409
+ xml.body(id: 'id') do
410
+ xml.capability id: 'cap 1'
411
+ xml.capability id: 'cap 2'
412
+ end
413
+ end.doc.root.to_xml
414
+ set_razor_response(doc)
415
+
416
+ get '/groups/id'
417
+
418
+ assert last_response.ok?, last_response.body
419
+ assert_equal 200, last_response.status
420
+ assert_equal doc, last_response.body
421
+ end
422
+ end
423
+
424
+ class TestUsers < TestCapabilitiesApp
425
+
426
+ def test_validates_xml
427
+
428
+ doc = '<body/>'
429
+ set_razor_response(doc)
430
+
431
+ get '/users'
432
+
433
+ assert_false last_response.ok?, last_response.body
434
+ assert_equal 404, last_response.status
435
+ assert_equal('Capabilities not found', last_response.body)
436
+ end
437
+
438
+ def test_get
439
+
440
+ doc = ::Nokogiri::XML::Builder.new do |xml|
441
+ xml.body do
442
+ xml.user id: 'user 1' do
443
+ xml.groups do
444
+ xml.group id: 'group 1'
445
+ end
446
+ end
447
+ xml.user id: 'user 2' do
448
+ xml.groups do
449
+ xml.group id: 'group 2'
450
+ end
451
+ end
452
+ end
453
+ end.doc.root.to_xml
454
+ set_razor_response(doc)
455
+
456
+ get '/users'
457
+ assert last_response.ok?, last_response.body
458
+ assert_equal 200, last_response.status
459
+ assert_equal doc, last_response.body
460
+ end
461
+ end
462
+
463
+ class TestGroupUsers < TestCapabilitiesApp
464
+
465
+ def test_validates_xml
466
+
467
+ doc = '<body/>'
468
+ set_razor_response(doc)
469
+
470
+ get '/users/group_id'
471
+
472
+ assert_false last_response.ok?, last_response.body
473
+ assert_equal 404, last_response.status
474
+ assert_equal('Capabilities not found', last_response.body)
475
+ end
476
+
477
+ def test_validates_group_id
478
+
479
+ doc = ::Nokogiri::XML::Builder.new do |xml|
480
+ xml.body do
481
+ xml.user id: 'user 1' do
482
+ xml.groups do
483
+ xml.group id: 'group 1'
484
+ end
485
+ end
486
+ xml.user id: 'user 2' do
487
+ xml.groups do
488
+ xml.group id: 'group 2'
489
+ end
490
+ end
491
+ end
492
+ end.doc.root.to_xml
493
+ set_razor_response(doc)
494
+
495
+ get '/users/group%201'
496
+
497
+ assert_false last_response.ok?, last_response.body
498
+ assert_equal 500, last_response.status
499
+ assert_equal 'Server Error', last_response.body
500
+ end
501
+
502
+ def test_get
503
+
504
+ doc = ::Nokogiri::XML::Builder.new do |xml|
505
+ xml.body do
506
+ xml.user id: 'user 1' do
507
+ xml.groups do
508
+ xml.group id: 'group 1'
509
+ end
510
+ end
511
+ xml.user id: 'user 2' do
512
+ xml.groups do
513
+ xml.group id: 'group 1'
514
+ end
515
+ end
516
+ end
517
+ end.doc.root.to_xml
518
+ set_razor_response(doc)
519
+
520
+ get '/users/group%201'
521
+
522
+ assert last_response.ok?, last_response.body
523
+ assert_equal 200, last_response.status
524
+ assert_equal doc, last_response.body
525
+ end
526
+
527
+ def test_validates_multiple_group_ids
528
+
529
+ doc = ::Nokogiri::XML::Builder.new do |xml|
530
+ xml.body do
531
+ xml.user id: 'user 1' do
532
+ xml.groups do
533
+ xml.group id: 'group 2'
534
+ end
535
+ end
536
+ xml.user id: 'user 2' do
537
+ xml.groups do
538
+ xml.group id: 'group 1'
539
+ xml.group id: 'group 2'
540
+ end
541
+ end
542
+ end
543
+ end.doc.root.to_xml
544
+ set_razor_response(doc)
545
+
546
+ get '/users/group%202'
547
+
548
+ assert last_response.ok?, last_response.body
549
+ assert_equal 200, last_response.status
550
+ assert_equal doc, last_response.body
551
+ end
552
+
553
+ def test_case_sensitive_validation
554
+
555
+ doc = ::Nokogiri::XML::Builder.new do |xml|
556
+ xml.body do
557
+ xml.user id: 'user 1' do
558
+ xml.groups do
559
+ xml.group id: 'Group 1'
560
+ end
561
+ end
562
+ xml.user id: 'user 2' do
563
+ xml.groups do
564
+ xml.group id: 'group 1'
565
+ end
566
+ end
567
+ end
568
+ end.doc.root.to_xml
569
+ set_razor_response(doc)
570
+
571
+ get '/users/group%201'
572
+
573
+ assert_false last_response.ok?, last_response.body
574
+ assert_equal 500, last_response.status
575
+ assert_equal 'Server Error', last_response.body
576
+ end
577
+ end
578
+
579
+ class TestUser < TestCapabilitiesApp
580
+
581
+ def test_validates_xml
582
+
583
+ doc = ::Nokogiri::XML::Builder.new do |xml|
584
+ xml.body id: 'id1' do
585
+ xml.groups do
586
+ xml.group id: 'group 2'
587
+ end
588
+ end
589
+ end.doc.root.to_xml
590
+ set_razor_response(doc)
591
+
592
+ get '/users/-/id'
593
+
594
+ assert_false last_response.ok?, last_response.body
595
+ assert_equal 404, last_response.status
596
+ assert_equal('Capabilities not found', last_response.body)
597
+ end
598
+
599
+ def test_get
600
+
601
+ doc = ::Nokogiri::XML::Builder.new do |xml|
602
+ xml.body id: 'id' do
603
+ xml.groups do
604
+ xml.group id: 'group 2'
605
+ end
606
+ end
607
+ end.doc.root.to_xml
608
+ set_razor_response(doc)
609
+
610
+ get '/users/-/id'
611
+
612
+ assert last_response.ok?, last_response.body
613
+ assert_equal 200, last_response.status
614
+ assert_equal doc, last_response.body
615
+ end
616
+ end
617
+
618
+ class TestSubjects < TestCapabilitiesApp
619
+
620
+ def test_validates_xml
621
+
622
+ doc = '<body/>'
623
+ set_razor_response(doc)
624
+
625
+ get '/subjects'
626
+
627
+ assert_false last_response.ok?, last_response.body
628
+ assert_equal 404, last_response.status
629
+ assert_equal('Capabilities not found', last_response.body)
630
+ end
631
+
632
+ def test_get
633
+
634
+ doc = ::Nokogiri::XML::Builder.new do |xml|
635
+ xml.body do
636
+ xml.subject name: 'subject1' do
637
+ xml.action name: 'action1', code: 'a1'
638
+ end
639
+ xml.subject name: 'subject2' do
640
+ xml.action name: 'action2', code: 'a2'
641
+ end
642
+ end
643
+ end.doc.root.to_xml
644
+ set_razor_response(doc)
645
+
646
+ get '/subjects'
647
+ assert last_response.ok?, last_response.body
648
+ assert_equal 200, last_response.status
649
+ assert_equal doc, last_response.body
650
+ end
651
+ end
652
+
653
+ class TestSubject < TestCapabilitiesApp
654
+
655
+ def test_validates_xml
656
+
657
+ doc = ::Nokogiri::XML::Builder.new do |xml|
658
+ xml.body name: 'name1' do
659
+ xml.action name: 'action1', code: 'a1'
660
+ xml.action name: 'action2', code: 'a2'
661
+ end
662
+ end.doc.root.to_xml
663
+ set_razor_response(doc)
664
+
665
+ get '/subjects/name'
666
+
667
+ assert_false last_response.ok?, last_response.body
668
+ assert_equal 404, last_response.status
669
+ assert_equal('Capabilities not found', last_response.body)
670
+ end
671
+
672
+ def test_get
673
+
674
+ doc = ::Nokogiri::XML::Builder.new do |xml|
675
+ xml.body name: 'name' do
676
+ xml.action name: 'action1', code: 'a1'
677
+ xml.action name: 'action2', code: 'a2'
678
+ end
679
+ end.doc.root.to_xml
680
+ set_razor_response(doc)
681
+
682
+ get '/subjects/name'
683
+
684
+ assert last_response.ok?, last_response.body
685
+ assert_equal 200, last_response.status
686
+ assert_equal doc, last_response.body
687
+ end
688
+ end
689
+
690
+ class TestDataSubjects < TestCapabilitiesApp
691
+
692
+ def test_validates_xml
693
+
694
+ doc = '<body/>'
695
+ set_razor_response(doc)
696
+
697
+ get '/data-subjects'
698
+
699
+ assert_false last_response.ok?, last_response.body
700
+ assert_equal 404, last_response.status
701
+ assert_equal('Capabilities not found', last_response.body)
702
+ end
703
+
704
+ def test_get
705
+
706
+ doc = ::Nokogiri::XML::Builder.new do |xml|
707
+ xml.body do
708
+ xml.dataSubject name: 'subject1' do
709
+ xml.dataAction name: 'action1', code: 'a1'
710
+ end
711
+ xml.dataSubject name: 'subject2' do
712
+ xml.dataAction name: 'action2', code: 'a2'
713
+ end
714
+ end
715
+ end.doc.root.to_xml
716
+ set_razor_response(doc)
717
+
718
+ get '/data-subjects'
719
+
720
+ assert last_response.ok?, last_response.body
721
+ assert_equal 200, last_response.status
722
+ assert_equal doc, last_response.body
723
+ end
724
+ end
725
+
726
+ class TestDataSubject < TestCapabilitiesApp
727
+
728
+ def test_validates_xml
729
+
730
+ doc = ::Nokogiri::XML::Builder.new do |xml|
731
+ xml.body name: 'name1' do
732
+ xml.dataAction name: 'action1', code: 'a1'
733
+ xml.dataAction name: 'action2', code: 'a2'
734
+ end
735
+ end.doc.root.to_xml
736
+ set_razor_response(doc)
737
+
738
+ get '/data-subjects/name'
739
+
740
+ assert_false last_response.ok?, last_response.body
741
+ assert_equal 404, last_response.status
742
+ assert_equal('Capabilities not found', last_response.body)
743
+ end
744
+
745
+ def test_get
746
+
747
+ doc = ::Nokogiri::XML::Builder.new do |xml|
748
+ xml.body name: 'name' do
749
+ xml.dataAction name: 'action1', code: 'a1'
750
+ xml.dataAction name: 'action2', code: 'a2'
751
+ end
752
+ end.doc.root.to_xml
753
+ set_razor_response(doc)
754
+
755
+ get '/data-subjects/name'
756
+
757
+ assert last_response.ok?, last_response.body
758
+ assert_equal 200, last_response.status
759
+ assert_equal doc, last_response.body
760
+ end
761
+ end
762
+
763
+ # ############################## end of file ############################# #
764
+
765
+