Skip to content

Commit

Permalink
spawn with default values and keep url state updated while spawning
Browse files Browse the repository at this point in the history
  • Loading branch information
Brian Hoffman committed Jun 7, 2022
1 parent b943d21 commit c1c4e0f
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 26 deletions.
18 changes: 18 additions & 0 deletions frontend/app/assets/javascripts/archival_objects.crud.js
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,15 @@ function validateResourceAndParent() {
linker: true, //?
multiplicity: 1,
onLink: function (resource_uri) {
let resource_id = resource_uri.replace(/.*\//, '');
let locationParams = location.href.split('?')[1];
locationParams = new URLSearchParams(locationParams);
locationParams.set('resource_id', resource_id);
history.replaceState(
{},
document.title,
location.href.split('?')[0] + '?' + locationParams.toString()
);
$resourceInput.attr('name', 'archival_object[resource][ref]');
$resourceInput.val(resource_uri);
$('#archival_object_form')
Expand Down Expand Up @@ -262,6 +271,15 @@ function validateResourceAndParent() {
linker: true,
multiplicity: 1,
onLink: function (parent_uri) {
let parent_id = parent_uri.replace(/.*\//, '');
let locationParams = location.href.split('?')[1];
locationParams = new URLSearchParams(locationParams);
locationParams.set('archival_object_id', parent_id);
history.replaceState(
{},
document.title,
location.href.split('?')[0] + '?' + locationParams.toString()
);
$parentInput.attr('name', 'archival_object[parent][ref]');
$parentInput.val(parent_uri);
validateResourceAndParent();
Expand Down
18 changes: 6 additions & 12 deletions frontend/app/controllers/archival_objects_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,17 @@ def new
@archival_object.parent = {'ref' => ArchivalObject.uri_for(params[:archival_object_id])} if params.has_key?(:archival_object_id)
@archival_object.resource = {'ref' => Resource.uri_for(params[:resource_id])} if params.has_key?(:resource_id)
@archival_object.position = params[:position]
if defaults = user_defaults('archival_object')
@archival_object.update(defaults.values)
end

if params[:accession_id]
acc = Accession.find(params[:accession_id], find_opts)

if acc
@archival_object.populate_from_accession(acc)
flash.now[:info] = I18n.t("archival_object._frontend.messages.spawned", JSONModelI18nWrapper.new(:accession => acc).enable_parse_mixed_content!(url_for(:root)))
flash[:spawned_from_accession] = acc.id
end

elsif user_prefs['default_values']
defaults = DefaultValues.get 'archival_object'

@archival_object.update(defaults.values) if defaults
@archival_object.populate_from_accession(acc)
flash.now[:info] = I18n.t("archival_object._frontend.messages.spawned", JSONModelI18nWrapper.new(:accession => acc).enable_parse_mixed_content!(url_for(:root)))
flash[:spawned_from_accession] = acc.id
end


return render_aspace_partial :partial => "archival_objects/new_inline" if inline?

# render the full AO form
Expand Down
14 changes: 0 additions & 14 deletions frontend/app/models/archival_object.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,5 @@ def populate_from_accession(accession)
self.rights_statements = Array(accession.rights_statements).map {|rights_statement|
rights_statement.clone.tap {|r| r.delete('identifier')}
}

if !self.extents || self.extents.empty?
self.extents = [JSONModel(:extent).new._always_valid!]
end

if !self.dates || self.dates.empty?
self.dates = [JSONModel(:date).new._always_valid!]
end

if !self.lang_materials || self.lang_materials.empty?
self.lang_materials = [JSONModel(:lang_material).new._always_valid!]
end
end


end
38 changes: 38 additions & 0 deletions frontend/spec/controllers/archival_objects_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,19 @@
:resource => {'ref' => resource.uri}) }
let (:random_archival_object) { create(:json_archival_object) }
let (:accession) { create(:json_accession) }
let(:default_values) {
DefaultValues.new(
JSONModel(:default_values).from_hash(
{
record_type: 'archival_object',
defaults: {
publish: true,
title: 'Default Title'
}
})
)
}


it "does not assign a resource to the new object by default" do
get :new, params: { accession_id: accession.id }
Expand Down Expand Up @@ -49,5 +62,30 @@
assert_select "[value=?]", archival_object.uri
end
end

it "can apply default values" do
allow(controller).to receive(:user_defaults).with('archival_object').and_return(default_values)
get :new, params: { resource_id: resource.id,
archival_object_id: archival_object.id }

expect(response.status).to eq 200
result = Capybara.string(response.body)
result.find(:css, "#archival_object_title_") do |form_input|
expect(form_input.value).to eq("Default Title")
end
end

it "can spawn from an accession using the accession_id param, overriding defaults" do
allow(controller).to receive(:user_defaults).with('archival_object').and_return(default_values)
get :new, params: { accession_id: accession.id,
resource_id: resource.id,
archival_object_id: archival_object.id }

expect(response.status).to eq 200
result = Capybara.string(response.body)
result.find(:css, "#archival_object_title_") do |form_input|
expect(form_input.value).to eq(accession.title)
end
end
end
end
2 changes: 2 additions & 0 deletions frontend/spec/features/spawning_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
find("#addSelectedButton").click
find("input[value='#{@parent.uri}']").click
find("#addSelectedButton").click
expect(page.evaluate_script("location.href")).to include("resource_id=#{@resource.id}")
expect(page.evaluate_script("location.href")).to include("archival_object_id=#{@parent.id}")
expect(find("#archival_object_title_").value()).to eq "Spawned Accession"
find("#archival_object_level_ option[value='class']").click
find(".save-changes button[type='submit']").click
Expand Down

0 comments on commit c1c4e0f

Please sign in to comment.