et_fake_ccd 0.1.17 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3650d5f2910829691719778ec18ca0da089581e9126468cf404704513c9b34f2
4
- data.tar.gz: 4792f9cd762c5ba1b8b5f79e5a655a6a6602908571a79abe20ce5e3609556c4b
3
+ metadata.gz: b396e67772f1ba9407c733f98fb6bcbd5c374671fe3f025ae8e4a2440f81136b
4
+ data.tar.gz: 1789651700ab482fac61cb54fea3ca9a82c45082596b38a3deead00fc60713b3
5
5
  SHA512:
6
- metadata.gz: 7902fff2cc94e78d8fa52eadf4cfcbdfb9567c8bf4aea3a418f32c31d24c6af2305299d65acc4d5ad404895464048befea0efbcf8dcd8e0b8e5845b8d52af7c1
7
- data.tar.gz: 37ac8465908e78804bcf5f4df3210a6882557da67df8e76b58070f12dfd60581b5263871503796c5f254bd7057bde64738e695a794b917c325317de8c1a7b242
6
+ metadata.gz: 16e5ad736c2a0d68f2c2de22230f0a8c3e5460fc03a4a68adccc8dc70efdab211b11c1db5cb8391ef7861f601d28ca5dc9c055bda1023283459cb27edbe9a5df
7
+ data.tar.gz: 7ee881410b2c21ac740b49330524a03ccc74b0e39403c03b86de2a10d6974d42321efc5f50f10440ad6707b3284b7c1b484e2ecdeb1684e55be071217e73c6fe
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- et_fake_ccd (0.1.17)
4
+ et_fake_ccd (0.1.18)
5
5
  activemodel (~> 5.2, >= 5.2.3)
6
6
  puma (~> 3.12)
7
7
  roda (~> 3.21)
@@ -50,7 +50,7 @@ module EtFakeCcd
50
50
  errors.add :data, "Case data validation failed", field_error: { id: 'claimantType.claimant_contact_preference', message: "#{pref} is not a valid value" } unless valid_values.include?(pref)
51
51
  end
52
52
  data.dig('data', 'claimantType', 'claimant_addressUK', 'PostCode').tap do |postcode|
53
- errors.add :data, "Case data validation failed", field_error: { id: 'claimantType.claimant_addressUK.PostCode', message: "#{postcode} exceed maximum length 14" } if postcode.length > 10
53
+ errors.add :data, "Case data validation failed", field_error: { id: 'claimantType.claimant_addressUK.PostCode', message: "#{postcode} exceed maximum length 10" } if postcode.length > 10
54
54
  end
55
55
  end
56
56
  end
@@ -4,6 +4,8 @@ module EtFakeCcd
4
4
  class UploadDocumentCommand
5
5
  include ActiveModel::Model
6
6
  include ActiveModel::Attributes
7
+ VALID_FILE_EXTENSIONS = ['.pdf', '.csv', '.rtf'].freeze
8
+ VALID_FILE_CONTENT_TYPES = ['application/pdf', 'text/csv', 'application/rtf'].freeze
7
9
 
8
10
  attribute :data
9
11
 
@@ -16,12 +18,22 @@ module EtFakeCcd
16
18
  private
17
19
 
18
20
  def validate_data
21
+ validate_file
22
+ end
23
+
24
+ def validate_file
25
+ return if validate_file_extension && validate_file_content_type
26
+
27
+ errors.add :data, "Your upload contains a disallowed file type", field_error: { "id": "files", "message": "Your upload contains a disallowed file type" }
28
+ end
19
29
 
30
+ def validate_file_content_type
31
+ VALID_FILE_CONTENT_TYPES.include?(data.dig('files', 'type'))
32
+ end
33
+
34
+ def validate_file_extension
35
+ VALID_FILE_EXTENSIONS.include?(File.extname(data.dig('files', 'filename')))
20
36
  end
21
37
  end
22
38
  end
23
39
  end
24
-
25
- #{"exception":"uk.gov.hmcts.ccd.endpoint.exceptions.CaseValidationException","timestamp":"2019-07-01T15:33:41.417","status":422,"error":"Unprocessable Entity","message":"Case data validation failed","path":"/caseworkers/22/jurisdictions/EMPLOYMENT/case-types/EmpTrib_MVP_1.0_Manc/cases","details":{"field_errors":[{"id":"claimantType.claimant_phone_number","message":"The data entered is not valid for this type of field, please delete and re-enter using only valid data"}]},"callbackErrors":null,"callbackWarnings":null}
26
- #{"exception":"uk.gov.hmcts.ccd.endpoint.exceptions.CaseValidationException","timestamp":"2019-07-01T15:51:15.291","status":422,"error":"Unprocessable Entity","message":"Case data validation failed","path":"/caseworkers/22/jurisdictions/EMPLOYMENT/case-types/EmpTrib_MVP_1.0_Manc/cases","details":{"field_errors":[{"id":"claimantType.claimant_mobile_number","message":"The data entered is not valid for this type of field, please delete and re-enter using only valid data"},{"id":"claimantType.claimant_phone_number","message":"The data entered is not valid for this type of field, please delete and re-enter using only valid data"}]},"callbackErrors":null,"callbackWarnings":null}
27
- #{"exception":"uk.gov.hmcts.ccd.endpoint.exceptions.CaseValidationException","timestamp":"2019-07-01T16:02:28.045","status":422,"error":"Unprocessable Entity","message":"Case data validation failed","path":"/caseworkers/22/jurisdictions/EMPLOYMENT/case-types/EmpTrib_MVP_1.0_Manc/cases","details":{"field_errors":[{"id":"claimant_TypeOfClaimant","message":"Wrong is not a valid value"},{"id":"claimantType.claimant_mobile_number","message":"The data entered is not valid for this type of field, please delete and re-enter using only valid data"},{"id":"claimantType.claimant_phone_number","message":"The data entered is not valid for this type of field, please delete and re-enter using only valid data"}]},"callbackErrors":null,"callbackWarnings":null}
@@ -3,6 +3,7 @@ require 'json'
3
3
  require 'et_fake_ccd/commands'
4
4
  require 'et_fake_ccd/auth_service'
5
5
  require 'et_fake_ccd/document_store_service'
6
+ require 'active_support/core_ext/hash'
6
7
  module EtFakeCcd
7
8
  module Service
8
9
  class DocumentStoreApp < Roda
@@ -16,7 +17,7 @@ module EtFakeCcd
16
17
  r.halt 403, forbidden_error_for(r)
17
18
  break
18
19
  end
19
- command = ::EtFakeCcd::Command::UploadDocumentCommand.from_json(r.params)
20
+ command = ::EtFakeCcd::Command::UploadDocumentCommand.from_json(r.params.deep_stringify_keys)
20
21
  unless command.valid?
21
22
  r.halt 422, render_error_for(command, r)
22
23
  break
@@ -110,6 +111,23 @@ module EtFakeCcd
110
111
  JSON.generate(j)
111
112
  end
112
113
 
114
+ def render_error_for(command, request)
115
+ j = {
116
+ "exception": "uk.gov.hmcts.ccd.endpoint.exceptions.CaseValidationException",
117
+ "timestamp": "2019-07-01T16:02:28.045",
118
+ "status": 422,
119
+ "error": "Unprocessable Entity",
120
+ "message": "Document validation failed",
121
+ "path": request.path,
122
+ "details": {
123
+ "field_errors": command.errors.details[:data].map {|e| e[:field_error]}
124
+ },
125
+ "callbackErrors": nil,
126
+ "callbackWarnings": nil
127
+ }
128
+
129
+ JSON.generate(j)
130
+ end
113
131
 
114
132
  def forbidden_error_for(r)
115
133
  j = {"timestamp":"2019-07-01T07:46:35.405+0000","status":403,"error":"Forbidden","message":"Access Denied","path": r.path}
@@ -1,3 +1,3 @@
1
1
  module EtFakeCcd
2
- VERSION = "0.1.17"
2
+ VERSION = "0.1.18"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: et_fake_ccd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.17
4
+ version: 0.1.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gary Taylor
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-30 00:00:00.000000000 Z
11
+ date: 2019-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: roda