hyrax-spec 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 201d0cd5f1c435e883f7a18f573c14d367490e1b
4
- data.tar.gz: a8af2de8319a29318c3da006e60a93b98f6160a9
3
+ metadata.gz: 56f98b28611537d25097f62fbb3fc0a29134a528
4
+ data.tar.gz: 05bbf255025da7828354c8c789066666fbd7cedc
5
5
  SHA512:
6
- metadata.gz: 6f01717f038d919a22bf265850c78d8fdadb845cca0e9e34dc5a47d1eeeb08b8f07f1dc9b0561594b1108ea361d3c9d8150bd09116b5e8497b54b47b6032626d
7
- data.tar.gz: b524cf308449c9131382e182992b6e96e927c7611d9f40aa8c00a753788302160061973729aab3a8452a2eeef0dba4228c04112da4d06736ae2bf1510da6d754
6
+ metadata.gz: a56166d2f65ffaffced6e014e655564804f9f80bfd154b2de60c64b5a1f3d41a0629c7cc2f49317c7f94719be3531d377309506a35ecd9e3bf1e0d8c442a3a42
7
+ data.tar.gz: c7e4601bc82514dd2d978806bb9453f05d11bd6ae17e9bcaa55404b5e2a5f281b60bc7e22c47021102787b710fefceb2304bd04b4cc0e5668908f848d8d1c523
data/.gitignore CHANGED
@@ -1 +1,3 @@
1
+ *.log
2
+ *.gem
1
3
  Gemfile.lock
@@ -0,0 +1,18 @@
1
+
2
+ v0.2.0 -- 2017-11-21
3
+ --------------------
4
+
5
+ - Introduce shared examples for Hyrax metadata
6
+ - 'a model with hyrax core metadata'
7
+ - 'a model with hyrax basic metadata'
8
+ - Add `acts` matcher for testing `Hyrax::Actors` c56248d
9
+ - Bugfix for `have_editable_property` failure reporting. 3a5af61
10
+
11
+ v0.1.0 -- 2017-11-07
12
+ --------------------
13
+
14
+ - Initial Release
15
+ - Add initial Hyrax matchers
16
+ - `have_editable_property`
17
+ - `have_form_field`
18
+ - `list_index_fields`
@@ -5,6 +5,7 @@ module Myrax
5
5
  ##
6
6
  # RSpec matchers for common Hyrax tests
7
7
  module Matchers
8
+ require 'hyrax/spec/matchers/act'
8
9
  require 'hyrax/spec/matchers/have_editable_property'
9
10
  require 'hyrax/spec/matchers/have_form_field'
10
11
  require 'hyrax/spec/matchers/list_index_fields'
@@ -0,0 +1,79 @@
1
+ RSpec::Matchers.define :act do
2
+ fake_actor = Class.new do
3
+ attr_reader :created, :updated, :destroyed
4
+
5
+ def create(*)
6
+ @created = true
7
+ end
8
+
9
+ def update(*)
10
+ @updated = true
11
+ end
12
+
13
+ def destroy(*)
14
+ @destroyed = true
15
+ end
16
+ end
17
+
18
+ fail_actor = Class.new do
19
+ def create(*)
20
+ false
21
+ end
22
+
23
+ def update(*)
24
+ false
25
+ end
26
+
27
+ def destroy(*)
28
+ false
29
+ end
30
+ end
31
+
32
+ match do |actor_class|
33
+ env ||= instance_double(Hyrax::Actors::Environment, curation_concern: nil)
34
+ @next_actor = fake_actor.new
35
+ actor = actor_class.new(@next_actor)
36
+ @create = actor.create(env)
37
+ @update = actor.update(env)
38
+ @destroy = actor.destroy(env)
39
+
40
+ failure_actor = actor_class.new(fail_actor.new)
41
+ @fail_create = failure_actor.create(env)
42
+ @fail_update = failure_actor.update(env)
43
+ @fail_destroy = failure_actor.destroy(env)
44
+
45
+ return false unless @next_actor.created && @next_actor.updated && @next_actor.destroyed
46
+ return false unless (@succeed && @create && @update && @destroy) ||
47
+ (!@succeed && !@create && !@update && !@destroy)
48
+ return false unless (!@recover && !@fail_create && !@fail_update && !@fail_destroy) ||
49
+ (@recover && @fail_create && @fail_update && @fail_destroy)
50
+ true
51
+ end
52
+
53
+ chain :and_succeed do
54
+ @succeed = true
55
+ end
56
+
57
+ chain :and_recover do
58
+ @recover = true
59
+ end
60
+
61
+ chain :with_env, :env
62
+
63
+ failure_message do |actor|
64
+ msg = "expected #{actor.class} to behave like a Hyrax::Actor but"
65
+ msg += "\n\t#create returned #{@create}" unless @create == true || !@succeed
66
+ msg += "\n\t#create was not called on the next actor" unless @next_actor.created
67
+ msg += "\n\tunexpectedly recovered from failure on #create" unless @recover || !@fail_create
68
+ msg += "\n\tdid not recover from failure on #create" unless !@recover || @fail_create
69
+ msg += "\n\t#update returned #{@update}" unless @update == true || !@succeed
70
+ msg += "\n\t#update was not called on the next actor" unless @next_actor.updated
71
+ msg += "\n\tunexpectedly recovered from failure on #update" unless @recover || !@fail_update
72
+ msg += "\n\tdid not recover from failure on #update" unless !@recover || @fail_update
73
+ msg += "\n\t#destroy returned #{@destroy}" unless @destroy == true || !@succeed
74
+ msg += "\n\t#destroy was not called on the next actor" unless @next_actor.destroyed
75
+ msg += "\n\tunexpectedly recovered from failure on #destroy" unless @recover || !@fail_destroy
76
+ msg += "\n\tdid not recover from failure on #destroy" unless !@recover || @fail_destroy
77
+ msg
78
+ end
79
+ end
@@ -44,7 +44,7 @@ RSpec::Matchers.define :have_editable_property do |property, predicate|
44
44
 
45
45
  return msg + "\n\tNo property for `#{property}` was found." if @missing_property
46
46
 
47
- msg += "\n\tThe configured predicate was #{actual_predicate.to_base}" unless
47
+ msg += "\n\tThe configured predicate was #{@actual_predicate.to_base}" unless
48
48
  @actual_predicate == predicate
49
49
  msg
50
50
  end
@@ -0,0 +1,7 @@
1
+ module Hyrax
2
+ module Spec
3
+ module SharedExamples
4
+ require 'hyrax/spec/shared_examples/basic_metadata'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,159 @@
1
+ RSpec.shared_examples 'a model with hyrax core metadata' do |**opts|
2
+ subject(:model) { described_class.new }
3
+ let(:except) { Array(opts[:except]) }
4
+
5
+ it do
6
+ skip if except.include?(:date_modified)
7
+ is_expected
8
+ .to have_editable_property(:date_modified)
9
+ .with_predicate(RDF::Vocab::DC.modified)
10
+ .as_single_valued
11
+ end
12
+
13
+ it do
14
+ skip if except.include?(:date_uploaded)
15
+ is_expected
16
+ .to have_editable_property(:date_uploaded)
17
+ .with_predicate(RDF::Vocab::DC.dateSubmitted)
18
+ .as_single_valued
19
+ end
20
+
21
+ it do
22
+ skip if except.include?(:depositor)
23
+ is_expected
24
+ .to have_editable_property(:depositor)
25
+ .with_predicate(RDF::Vocab::MARCRelators.dpt)
26
+ .as_single_valued
27
+ end
28
+
29
+ describe '#first_title' do
30
+ it 'is nil when empty' do
31
+ skip if except.include?(:first_title) || except.include?(:title)
32
+ expect(model.first_title).to be_nil
33
+ end
34
+
35
+ it 'is a single title' do
36
+ skip if except.include?(:first_title) || except.include?(:title)
37
+ expect { model.title = ['Comet in Moominland', 'Moomin Midwinter'] }
38
+ .to change { model.first_title }
39
+ .to an_instance_of(String)
40
+ end
41
+ end
42
+
43
+ it do
44
+ skip if except.include?(:title)
45
+ is_expected.to have_editable_property(:title, RDF::Vocab::DC.title)
46
+ end
47
+ end
48
+
49
+ RSpec.shared_examples 'a model with hyrax basic metadata' do |**opts|
50
+ subject(:model) { described_class.new }
51
+ let(:except) { Array(opts[:except]) }
52
+
53
+ it_behaves_like 'a model with hyrax core metadata', opts
54
+
55
+ it do
56
+ skip if except.include?(:label)
57
+ is_expected
58
+ .to have_editable_property(:label)
59
+ .with_predicate('info:fedora/fedora-system:def/model#downloadFilename')
60
+ .as_single_valued
61
+ end
62
+
63
+ it do
64
+ skip if except.include?(:relative_path)
65
+ is_expected
66
+ .to have_editable_property(:relative_path)
67
+ .with_predicate('http://scholarsphere.psu.edu/ns#relativePath')
68
+ .as_single_valued
69
+ end
70
+
71
+ it do
72
+ skip if except.include?(:import_url)
73
+ is_expected
74
+ .to have_editable_property(:import_url)
75
+ .with_predicate('http://scholarsphere.psu.edu/ns#importUrl')
76
+ .as_single_valued
77
+ end
78
+
79
+ it do
80
+ skip if except.include?(:bibliographic_citation)
81
+ is_expected.to have_editable_property(:bibliographic_citation, RDF::Vocab::DC.bibliographicCitation)
82
+ end
83
+
84
+ it do
85
+ skip if except.include?(:contributor)
86
+ is_expected.to have_editable_property(:contributor, RDF::Vocab::DC11.contributor)
87
+ end
88
+
89
+ it do
90
+ skip if except.include?(:creator)
91
+ is_expected.to have_editable_property(:creator, RDF::Vocab::DC11.creator)
92
+ end
93
+
94
+ it do
95
+ skip if except.include?(:date_created)
96
+ is_expected.to have_editable_property(:date_created, RDF::Vocab::DC.created)
97
+ end
98
+
99
+ it do
100
+ skip if except.include?(:description)
101
+ is_expected.to have_editable_property(:description, RDF::Vocab::DC11.description)
102
+ end
103
+
104
+ it do
105
+ skip if except.include?(:identifier)
106
+ is_expected.to have_editable_property(:identifier, RDF::Vocab::DC.identifier)
107
+ end
108
+
109
+ it do
110
+ skip if except.include?(:keyword)
111
+ is_expected.to have_editable_property(:keyword, RDF::Vocab::DC11.relation)
112
+ end
113
+
114
+ it do
115
+ skip if except.include?(:language)
116
+ is_expected.to have_editable_property(:language, RDF::Vocab::DC11.language)
117
+ end
118
+
119
+ it do
120
+ skip if except.include?(:license)
121
+ is_expected.to have_editable_property(:license, RDF::Vocab::DC.rights)
122
+ end
123
+
124
+ it do
125
+ skip if except.include?(:publisher)
126
+ is_expected.to have_editable_property(:publisher, RDF::Vocab::DC11.publisher)
127
+ end
128
+
129
+ it do
130
+ skip if except.include?(:related_url)
131
+ is_expected.to have_editable_property(:related_url, RDF::RDFS.seeAlso)
132
+ end
133
+
134
+ it do
135
+ skip if except.include?(:resource_type)
136
+ is_expected.to have_editable_property(:resource_type, RDF::Vocab::DC.type)
137
+ end
138
+
139
+ it do
140
+ skip if except.include?(:rights_statement)
141
+ is_expected.to have_editable_property(:rights_statement, RDF::Vocab::EDM.rights)
142
+ end
143
+
144
+ it do
145
+ skip if except.include?(:source)
146
+ is_expected.to have_editable_property(:source, RDF::Vocab::DC.source)
147
+ end
148
+
149
+ it do
150
+ skip if except.include?(:subject)
151
+ is_expected.to have_editable_property(:subject, RDF::Vocab::DC11.subject)
152
+ end
153
+
154
+ describe '#based_near' do
155
+ it 'builds as a location'
156
+ it 'is controlled'
157
+ it 'accepts nested attributes'
158
+ end
159
+ end
@@ -1,5 +1,5 @@
1
1
  module Hyrax
2
2
  module Spec
3
- VERSION = '0.1.0'.freeze
3
+ VERSION = '0.2.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyrax-spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Johnson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-07 00:00:00.000000000 Z
11
+ date: 2017-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -62,6 +62,7 @@ files:
62
62
  - ".gitignore"
63
63
  - ".rubocop.yml"
64
64
  - ".travis.yml"
65
+ - CHANGELOG.md
65
66
  - Gemfile
66
67
  - Guardfile
67
68
  - LICENSE
@@ -70,9 +71,12 @@ files:
70
71
  - hyrax-spec.gemspec
71
72
  - lib/hyrax/spec.rb
72
73
  - lib/hyrax/spec/matchers.rb
74
+ - lib/hyrax/spec/matchers/act.rb
73
75
  - lib/hyrax/spec/matchers/have_editable_property.rb
74
76
  - lib/hyrax/spec/matchers/have_form_field.rb
75
77
  - lib/hyrax/spec/matchers/list_index_fields.rb
78
+ - lib/hyrax/spec/shared_examples.rb
79
+ - lib/hyrax/spec/shared_examples/basic_metadata.rb
76
80
  - lib/hyrax/spec/version.rb
77
81
  - spec/hyrax/spec/spec_helper.rb
78
82
  - spec/hyrax/spec/version_spec.rb