Class: Cocina::RSpec::Factories
- Inherits:
-
Object
- Object
- Cocina::RSpec::Factories
- Defined in:
- lib/cocina/rspec/factories.rb
Overview
Factories for Cocina model objects.
Defined Under Namespace
Modules: Methods
Constant Summary collapse
- SUPPORTED_TYPES =
%i[ admin_policy admin_policy_with_metadata collection collection_with_metadata dro dro_with_metadata request_admin_policy request_collection request_dro ].freeze
- WITH_METADATA_SUFFIX =
'_with_metadata'
- DRO_DEFAULTS =
{ type: Cocina::Models::ObjectType.object, id: 'druid:bc234fg5678', version: 1, label: 'factory DRO label', title: 'factory DRO title', source_id: 'sul:1234', admin_policy_id: 'druid:hv992ry2431' }.freeze
- REQUEST_DRO_DEFAULTS =
DRO_DEFAULTS.except(:id)
- COLLECTION_DEFAULTS =
{ type: Cocina::Models::ObjectType.collection, id: 'druid:bb222ff5555', version: 1, label: 'factory collection label', title: 'factory collection title', admin_policy_id: 'druid:hv992ry2431' }.freeze
- REQUEST_COLLECTION_DEFAULTS =
COLLECTION_DEFAULTS.except(:id)
- ADMIN_POLICY_DEFAULTS =
{ type: Cocina::Models::ObjectType.admin_policy, id: 'druid:cb432gf8765', version: 1, label: 'factory APO label', title: 'factory APO title', admin_policy_id: 'druid:hv992ry2431', agreement_id: 'druid:hp308wm0436' }.freeze
- REQUEST_ADMIN_POLICY_DEFAULTS =
ADMIN_POLICY_DEFAULTS.except(:id)
Class Method Summary collapse
- .build(type, attributes = {}) ⇒ Object
- .build_admin_policy(attributes) ⇒ Object
- .build_admin_policy_properties(id:, **kwargs) ⇒ Object
-
.build_collection(attributes) ⇒ Object
rubocop:enable Metrics/ParameterLists.
- .build_collection_properties(id:, **kwargs) ⇒ Object
- .build_dro(attributes) ⇒ Object
- .build_dro_properties(id:, **kwargs) ⇒ Object
- .build_request_admin_policy(attributes) ⇒ Object
-
.build_request_admin_policy_properties(type:, version:, label:, title:, admin_policy_id:, agreement_id:, use_statement: nil, copyright: nil, license: nil, registration_workflow: nil, collections_for_registration: nil, without_description: false) ⇒ Object
rubocop:disable Metrics/ParameterLists.
- .build_request_collection(attributes) ⇒ Object
-
.build_request_collection_properties(type:, version:, label:, title:, admin_policy_id:, source_id: nil, catkeys: []) ⇒ Object
rubocop:disable Metrics/ParameterLists.
-
.build_request_dro(attributes) ⇒ Object
rubocop:enable Metrics/ParameterLists.
-
.build_request_dro_properties(type:, version:, label:, title:, source_id:, admin_policy_id:, barcode: nil, catkeys: [], collection_ids: []) ⇒ Object
rubocop:disable Metrics/ParameterLists.
- .supported_type?(type) ⇒ Boolean
Class Method Details
.build(type, attributes = {}) ⇒ Object
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/cocina/rspec/factories.rb', line 33 def self.build(type, attributes = {}) raise "Unsupported factory type #{type}" unless supported_type?(type) build_type = type.to_s.delete_suffix(WITH_METADATA_SUFFIX) fixture = public_send("build_#{build_type}".to_sym, attributes) return fixture unless type.end_with?(WITH_METADATA_SUFFIX) Cocina::Models.(fixture, 'abc123') end |
.build_admin_policy(attributes) ⇒ Object
163 164 165 |
# File 'lib/cocina/rspec/factories.rb', line 163 def self.build_admin_policy(attributes) Cocina::Models.build(build_admin_policy_properties(**ADMIN_POLICY_DEFAULTS.merge(attributes))) end |
.build_admin_policy_properties(id:, **kwargs) ⇒ Object
171 172 173 174 175 176 177 |
# File 'lib/cocina/rspec/factories.rb', line 171 def self.build_admin_policy_properties(id:, **kwargs) build_request_admin_policy_properties(**kwargs) .merge(externalIdentifier: id) .tap do |props| props[:description][:purl] = "https://purl.stanford.edu/#{id.delete_prefix('druid:')}" end end |
.build_collection(attributes) ⇒ Object
rubocop:enable Metrics/ParameterLists
155 156 157 |
# File 'lib/cocina/rspec/factories.rb', line 155 def self.build_collection(attributes) Cocina::Models.build(build_collection_properties(**COLLECTION_DEFAULTS.merge(attributes))) end |
.build_collection_properties(id:, **kwargs) ⇒ Object
124 125 126 127 128 129 130 |
# File 'lib/cocina/rspec/factories.rb', line 124 def self.build_collection_properties(id:, **kwargs) build_request_collection_properties(**kwargs) .merge(externalIdentifier: id) .tap do |props| props[:description][:purl] = "https://purl.stanford.edu/#{id.delete_prefix('druid:')}" end end |
.build_dro(attributes) ⇒ Object
87 88 89 |
# File 'lib/cocina/rspec/factories.rb', line 87 def self.build_dro(attributes) Cocina::Models.build(build_dro_properties(**DRO_DEFAULTS.merge(attributes))) end |
.build_dro_properties(id:, **kwargs) ⇒ Object
79 80 81 82 83 84 85 |
# File 'lib/cocina/rspec/factories.rb', line 79 def self.build_dro_properties(id:, **kwargs) build_request_dro_properties(**kwargs) .merge(externalIdentifier: id) .tap do |props| props[:description][:purl] = "https://purl.stanford.edu/#{id.delete_prefix('druid:')}" end end |
.build_request_admin_policy(attributes) ⇒ Object
167 168 169 |
# File 'lib/cocina/rspec/factories.rb', line 167 def self.build_request_admin_policy(attributes) Cocina::Models.build_request(build_request_admin_policy_properties(**REQUEST_ADMIN_POLICY_DEFAULTS.merge(attributes))) end |
.build_request_admin_policy_properties(type:, version:, label:, title:, admin_policy_id:, agreement_id:, use_statement: nil, copyright: nil, license: nil, registration_workflow: nil, collections_for_registration: nil, without_description: false) ⇒ Object
rubocop:disable Metrics/ParameterLists
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/cocina/rspec/factories.rb', line 180 def self.build_request_admin_policy_properties(type:, version:, label:, title:, admin_policy_id:, agreement_id:, use_statement: nil, copyright: nil, license: nil, registration_workflow: nil, collections_for_registration: nil, without_description: false) { type: type, version: version, label: label, administrative: { hasAdminPolicy: admin_policy_id, hasAgreement: agreement_id, accessTemplate: { view: 'world', download: 'world' } }, description: { title: [{ value: title }] } }.tap do |props| props[:administrative][:accessTemplate][:useAndReproductionStatement] = use_statement if use_statement props[:administrative][:accessTemplate][:copyright] = copyright if copyright props[:administrative][:accessTemplate][:license] = license if license props[:administrative][:registrationWorkflow] = registration_workflow if registration_workflow props[:administrative][:collectionsForRegistration] = collections_for_registration if collections_for_registration props.delete(:description) if without_description end end |
.build_request_collection(attributes) ⇒ Object
159 160 161 |
# File 'lib/cocina/rspec/factories.rb', line 159 def self.build_request_collection(attributes) Cocina::Models.build_request(build_request_collection_properties(**REQUEST_COLLECTION_DEFAULTS.merge(attributes))) end |
.build_request_collection_properties(type:, version:, label:, title:, admin_policy_id:, source_id: nil, catkeys: []) ⇒ Object
rubocop:disable Metrics/ParameterLists
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/cocina/rspec/factories.rb', line 133 def self.build_request_collection_properties(type:, version:, label:, title:, admin_policy_id:, source_id: nil, catkeys: []) { type: type, version: version, label: label, access: {}, administrative: { hasAdminPolicy: admin_policy_id }, description: { title: [{ value: title }] }, identification: {} }.tap do |props| if catkeys.present? props[:identification][:catalogLinks] = catkeys.map.with_index do |catkey, index| { catalog: 'symphony', catalogRecordId: catkey, refresh: index.zero? } end end props[:identification][:sourceId] = source_id if source_id end end |
.build_request_dro(attributes) ⇒ Object
rubocop:enable Metrics/ParameterLists
120 121 122 |
# File 'lib/cocina/rspec/factories.rb', line 120 def self.build_request_dro(attributes) Cocina::Models.build_request(build_request_dro_properties(**REQUEST_DRO_DEFAULTS.merge(attributes))) end |
.build_request_dro_properties(type:, version:, label:, title:, source_id:, admin_policy_id:, barcode: nil, catkeys: [], collection_ids: []) ⇒ Object
rubocop:disable Metrics/ParameterLists
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/cocina/rspec/factories.rb', line 92 def self.build_request_dro_properties(type:, version:, label:, title:, source_id:, admin_policy_id:, barcode: nil, catkeys: [], collection_ids: []) { type: type, version: version, label: label, access: {}, administrative: { hasAdminPolicy: admin_policy_id }, description: { title: [{ value: title }] }, identification: { sourceId: source_id }, structural: { isMemberOf: collection_ids } }.tap do |props| if catkeys.present? props[:identification][:catalogLinks] = catkeys.map.with_index do |catkey, index| { catalog: 'symphony', catalogRecordId: catkey, refresh: index.zero? } end end props[:identification][:barcode] = if end end |
.supported_type?(type) ⇒ Boolean
27 28 29 |
# File 'lib/cocina/rspec/factories.rb', line 27 def self.supported_type?(type) SUPPORTED_TYPES.include?(type) end |