ro-crate 0.4.9 → 0.4.13

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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +13 -13
  3. data/README.md +39 -0
  4. data/lib/ro_crate/model/crate.rb +48 -6
  5. data/lib/ro_crate/model/data_entity.rb +5 -4
  6. data/lib/ro_crate/model/directory.rb +2 -4
  7. data/lib/ro_crate/model/entity.rb +41 -4
  8. data/lib/ro_crate/model/entry.rb +2 -2
  9. data/lib/ro_crate/model/file.rb +2 -4
  10. data/lib/ro_crate/model/metadata.rb +9 -1
  11. data/lib/ro_crate/model/organization.rb +1 -1
  12. data/lib/ro_crate/model/preview.rb +3 -15
  13. data/lib/ro_crate/model/preview_generator.rb +40 -0
  14. data/lib/ro_crate/model/remote_entry.rb +1 -12
  15. data/lib/ro_crate/reader.rb +76 -19
  16. data/lib/ro_crate/writer.rb +4 -4
  17. data/lib/ro_crate.rb +2 -1
  18. data/ro_crate.gemspec +3 -3
  19. data/test/crate_test.rb +58 -3
  20. data/test/directory_test.rb +21 -21
  21. data/test/entity_test.rb +114 -0
  22. data/test/fixtures/biobb_hpc_workflows-condapack.zip +0 -0
  23. data/test/fixtures/conflicting_data_directory/info.txt +1 -0
  24. data/test/fixtures/conflicting_data_directory/nested.txt +1 -0
  25. data/test/fixtures/nested_directory.zip +0 -0
  26. data/test/fixtures/ro-crate-galaxy-sortchangecase/LICENSE +176 -0
  27. data/test/fixtures/ro-crate-galaxy-sortchangecase/README.md +6 -0
  28. data/test/fixtures/ro-crate-galaxy-sortchangecase/ro-crate-metadata.json +133 -0
  29. data/test/fixtures/ro-crate-galaxy-sortchangecase/sort-and-change-case.ga +118 -0
  30. data/test/fixtures/ro-crate-galaxy-sortchangecase/test/test1/input.bed +3 -0
  31. data/test/fixtures/ro-crate-galaxy-sortchangecase/test/test1/output_exp.bed +3 -0
  32. data/test/fixtures/ro-crate-galaxy-sortchangecase/test/test1/sort-and-change-case-test.yml +8 -0
  33. data/test/fixtures/sparse_directory_crate/ro-crate-preview.html +60 -59
  34. data/test/reader_test.rb +83 -40
  35. data/test/test_helper.rb +5 -1
  36. data/test/writer_test.rb +59 -2
  37. metadata +26 -8
@@ -0,0 +1,133 @@
1
+ {
2
+ "@context": [
3
+ "https://w3id.org/ro/crate/1.1/context",
4
+ {
5
+ "TestSuite": "https://w3id.org/ro/terms/test#TestSuite",
6
+ "TestInstance": "https://w3id.org/ro/terms/test#TestInstance",
7
+ "TestService": "https://w3id.org/ro/terms/test#TestService",
8
+ "TestDefinition": "https://w3id.org/ro/terms/test#TestDefinition",
9
+ "PlanemoEngine": "https://w3id.org/ro/terms/test#PlanemoEngine",
10
+ "JenkinsService": "https://w3id.org/ro/terms/test#JenkinsService",
11
+ "TravisService": "https://w3id.org/ro/terms/test#TravisService",
12
+ "GithubService": "https://w3id.org/ro/terms/test#GithubService",
13
+ "instance": "https://w3id.org/ro/terms/test#instance",
14
+ "runsOn": "https://w3id.org/ro/terms/test#runsOn",
15
+ "resource": "https://w3id.org/ro/terms/test#resource",
16
+ "definition": "https://w3id.org/ro/terms/test#definition",
17
+ "engineVersion": "https://w3id.org/ro/terms/test#engineVersion"
18
+ }
19
+ ],
20
+ "@graph": [
21
+ {
22
+ "@id": "ro-crate-metadata.json",
23
+ "@type": "CreativeWork",
24
+ "about": {
25
+ "@id": "./"
26
+ },
27
+ "conformsTo": {
28
+ "@id": "https://w3id.org/ro/crate/1.1"
29
+ }
30
+ },
31
+ {
32
+ "@id": "./",
33
+ "@type": "Dataset",
34
+ "name": "sort-and-change-case",
35
+ "description": "sort lines and change text to upper case",
36
+ "license": "Apache-2.0",
37
+ "mainEntity": {
38
+ "@id": "sort-and-change-case.ga"
39
+ },
40
+ "hasPart": [
41
+ {
42
+ "@id": "sort-and-change-case.ga"
43
+ },
44
+ {
45
+ "@id": "LICENSE"
46
+ },
47
+ {
48
+ "@id": "README.md"
49
+ },
50
+ {
51
+ "@id": "test/test1/sort-and-change-case-test.yml"
52
+ }
53
+ ],
54
+ "mentions": [
55
+ {
56
+ "@id": "#test1"
57
+ }
58
+ ]
59
+ },
60
+ {
61
+ "@id": "sort-and-change-case.ga",
62
+ "@type": [
63
+ "File",
64
+ "SoftwareSourceCode",
65
+ "ComputationalWorkflow"
66
+ ],
67
+ "programmingLanguage": {
68
+ "@id": "#galaxy"
69
+ },
70
+ "name": "sort-and-change-case"
71
+ },
72
+ {
73
+ "@id": "LICENSE",
74
+ "@type": "File"
75
+ },
76
+ {
77
+ "@id": "README.md",
78
+ "@type": "File"
79
+ },
80
+ {
81
+ "@id": "#galaxy",
82
+ "@type": "ComputerLanguage",
83
+ "name": "Galaxy",
84
+ "identifier": {
85
+ "@id": "https://galaxyproject.org/"
86
+ },
87
+ "url": {
88
+ "@id": "https://galaxyproject.org/"
89
+ }
90
+ },
91
+ {
92
+ "@id": "#test1",
93
+ "name": "test1",
94
+ "@type": "TestSuite",
95
+ "mainEntity": {
96
+ "@id": "sort-and-change-case.ga"
97
+ },
98
+ "instance": [
99
+ {"@id": "#test1_1"}
100
+ ],
101
+ "definition": {"@id": "test/test1/sort-and-change-case-test.yml"}
102
+ },
103
+ {
104
+ "@id": "#test1_1",
105
+ "name": "test1_1",
106
+ "@type": "TestInstance",
107
+ "runsOn": {"@id": "https://w3id.org/ro/terms/test#JenkinsService"},
108
+ "url": "http://example.org/jenkins",
109
+ "resource": "job/tests/"
110
+ },
111
+ {
112
+ "@id": "test/test1/sort-and-change-case-test.yml",
113
+ "@type": [
114
+ "File",
115
+ "TestDefinition"
116
+ ],
117
+ "conformsTo": {"@id": "https://w3id.org/ro/terms/test#PlanemoEngine"},
118
+ "engineVersion": ">=0.70"
119
+ },
120
+ {
121
+ "@id": "https://w3id.org/ro/terms/test#JenkinsService",
122
+ "@type": "TestService",
123
+ "name": "Jenkins",
124
+ "url": {"@id": "https://www.jenkins.io"}
125
+ },
126
+ {
127
+ "@id": "https://w3id.org/ro/terms/test#PlanemoEngine",
128
+ "@type": "SoftwareApplication",
129
+ "name": "Planemo",
130
+ "url": {"@id": "https://github.com/galaxyproject/planemo"}
131
+ }
132
+ ]
133
+ }
@@ -0,0 +1,118 @@
1
+ {
2
+ "uuid": "e2a8566c-c025-4181-9e90-7ed29d4e4df1",
3
+ "tags": [],
4
+ "format-version": "0.1",
5
+ "name": "sort-and-change-case",
6
+ "version": 0,
7
+ "steps": {
8
+ "0": {
9
+ "tool_id": null,
10
+ "tool_version": null,
11
+ "outputs": [],
12
+ "workflow_outputs": [],
13
+ "input_connections": {},
14
+ "tool_state": "{}",
15
+ "id": 0,
16
+ "uuid": "5a36fad2-66c7-4b9e-8759-0fbcae9b8541",
17
+ "errors": null,
18
+ "name": "Input dataset",
19
+ "label": "bed_input",
20
+ "inputs": [],
21
+ "position": {
22
+ "top": 200,
23
+ "left": 200
24
+ },
25
+ "annotation": "",
26
+ "content_id": null,
27
+ "type": "data_input"
28
+ },
29
+ "1": {
30
+ "tool_id": "sort1",
31
+ "tool_version": "1.1.0",
32
+ "outputs": [
33
+ {
34
+ "type": "input",
35
+ "name": "out_file1"
36
+ }
37
+ ],
38
+ "workflow_outputs": [
39
+ {
40
+ "output_name": "out_file1",
41
+ "uuid": "8237f71a-bc2a-494e-a63c-09c1e65ef7c8",
42
+ "label": "sorted_bed"
43
+ }
44
+ ],
45
+ "input_connections": {
46
+ "input": {
47
+ "output_name": "output",
48
+ "id": 0
49
+ }
50
+ },
51
+ "tool_state": "{\"__page__\": null, \"style\": \"\\\"alpha\\\"\", \"column\": \"\\\"1\\\"\", \"__rerun_remap_job_id__\": null, \"column_set\": \"[]\", \"input\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"header_lines\": \"\\\"0\\\"\", \"order\": \"\\\"ASC\\\"\"}",
52
+ "id": 1,
53
+ "uuid": "0b6b3cda-c75f-452b-85b1-8ae4f3302ba4",
54
+ "errors": null,
55
+ "name": "Sort",
56
+ "post_job_actions": {},
57
+ "label": "sort",
58
+ "inputs": [
59
+ {
60
+ "name": "input",
61
+ "description": "runtime parameter for tool Sort"
62
+ }
63
+ ],
64
+ "position": {
65
+ "top": 200,
66
+ "left": 420
67
+ },
68
+ "annotation": "",
69
+ "content_id": "sort1",
70
+ "type": "tool"
71
+ },
72
+ "2": {
73
+ "tool_id": "ChangeCase",
74
+ "tool_version": "1.0.0",
75
+ "outputs": [
76
+ {
77
+ "type": "tabular",
78
+ "name": "out_file1"
79
+ }
80
+ ],
81
+ "workflow_outputs": [
82
+ {
83
+ "output_name": "out_file1",
84
+ "uuid": "c31cd733-dab6-4d50-9fec-b644d162397b",
85
+ "label": "uppercase_bed"
86
+ }
87
+ ],
88
+ "input_connections": {
89
+ "input": {
90
+ "output_name": "out_file1",
91
+ "id": 1
92
+ }
93
+ },
94
+ "tool_state": "{\"__page__\": null, \"casing\": \"\\\"up\\\"\", \"__rerun_remap_job_id__\": null, \"cols\": \"\\\"c1\\\"\", \"delimiter\": \"\\\"TAB\\\"\", \"input\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\"}",
95
+ "id": 2,
96
+ "uuid": "9698bcde-0729-48fe-b88d-ccfb6f6153b4",
97
+ "errors": null,
98
+ "name": "Change Case",
99
+ "post_job_actions": {},
100
+ "label": "change_case",
101
+ "inputs": [
102
+ {
103
+ "name": "input",
104
+ "description": "runtime parameter for tool Change Case"
105
+ }
106
+ ],
107
+ "position": {
108
+ "top": 200,
109
+ "left": 640
110
+ },
111
+ "annotation": "",
112
+ "content_id": "ChangeCase",
113
+ "type": "tool"
114
+ }
115
+ },
116
+ "annotation": "",
117
+ "a_galaxy_workflow": "true"
118
+ }
@@ -0,0 +1,3 @@
1
+ chr1 66999824 67210768
2
+ chr7 48998526 50489626
3
+ chr1 66874821 66010368
@@ -0,0 +1,3 @@
1
+ CHR1 66874821 66010368
2
+ CHR1 66999824 67210768
3
+ CHR7 48998526 50489626
@@ -0,0 +1,8 @@
1
+ - doc: test with a small input
2
+ job:
3
+ bed_input:
4
+ class: File
5
+ path: input.bed
6
+ outputs:
7
+ uppercase_bed:
8
+ path: output_exp.bed
@@ -1,66 +1,67 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
- <title>New RO-Crate</title>
5
- <script type="application/ld+json">{
6
- "@context": "https://w3id.org/ro/crate/1.1/context",
7
- "@graph": [
8
- {
9
- "@id": "ro-crate-metadata.jsonld",
10
- "@type": "CreativeWork",
11
- "about": {
12
- "@id": "./"
13
- }
14
- },
15
- {
16
- "@id": "ro-crate-preview.html",
17
- "@type": "CreativeWork",
18
- "about": {
19
- "@id": "./"
20
- }
21
- },
22
- {
23
- "@id": "./",
24
- "@type": "Dataset",
25
- "hasPart": [
26
- {
27
- "@id": "fish/"
28
- }
29
- ]
30
- },
31
- {
32
- "@id": "fish/",
33
- "@type": "Dataset"
34
- }
35
- ]
36
- }</script>
37
- <meta name="generator" content="https://github.com/fbacall/ro-crate-ruby">
38
- <meta name="keywords" content="RO-Crate">
4
+ <title>New RO-Crate</title>
5
+ <script type="application/ld+json">{
6
+ "@context": "https://w3id.org/ro/crate/1.0/context",
7
+ "@graph": [
8
+ {
9
+ "@id": "ro-crate-metadata.jsonld",
10
+ "@type": "CreativeWork",
11
+ "about": {
12
+ "@id": "./"
13
+ }
14
+ },
15
+ {
16
+ "@id": "ro-crate-preview.html",
17
+ "@type": "CreativeWork",
18
+ "about": {
19
+ "@id": "./"
20
+ }
21
+ },
22
+ {
23
+ "@id": "./",
24
+ "@type": "Dataset",
25
+ "hasPart": [
26
+ {
27
+ "@id": "listed_file.txt"
28
+ }
29
+ ]
30
+ },
31
+ {
32
+ "@id": "listed_file.txt",
33
+ "@type": "File"
34
+ }
35
+ ]
36
+ }</script>
37
+ <meta name="generator" content="https://github.com/fbacall/ro-crate-ruby">
38
+ <meta name="keywords" content="RO-Crate">
39
39
  </head>
40
40
  <body>
41
- <h1>New RO-Crate</h1>
42
-
43
- <p>
44
-
45
- </p>
46
- <dl>
47
-
48
-
49
-
50
-
51
- </dl>
41
+ <h1>New RO-Crate</h1>
42
+ Some stuff has been added here blablabla
52
43
 
53
- <h2>Contents</h2>
54
- <ul>
55
-
56
- <li id="__data_entity_fish/">
57
-
58
- <strong>fish/</strong>
59
-
60
-
61
-
62
- </li>
63
-
64
- </ul>
44
+ <p>
45
+
46
+ </p>
47
+ <dl>
48
+
49
+
50
+
51
+
52
+ </dl>
53
+
54
+ <h2>Contents</h2>
55
+ <ul>
56
+
57
+ <li id="__data_entity_listed_file.txt">
58
+
59
+ <strong>listed_file.txt</strong>
60
+
61
+
62
+
63
+ </li>
64
+
65
+ </ul>
65
66
  </body>
66
- </html>
67
+ </html>
data/test/reader_test.rb CHANGED
@@ -88,12 +88,12 @@ class ReaderTest < Test::Unit::TestCase
88
88
  test 'reading from zip with directories' do
89
89
  crate = ROCrate::Reader.read_zip(fixture_file('directory.zip'))
90
90
 
91
- assert crate.entries['fish/info.txt']
92
- assert_equal '1234', crate.entries['fish/info.txt'].source.read.chomp
93
- assert crate.entries['fish/root.txt']
94
- assert crate.entries['fish/data/info.txt']
95
- assert crate.entries['fish/data/nested.txt']
96
- assert crate.entries['fish/data/binary.jpg']
91
+ assert crate.payload['fish/info.txt']
92
+ assert_equal '1234', crate.payload['fish/info.txt'].source.read.chomp
93
+ assert crate.payload['fish/root.txt']
94
+ assert crate.payload['fish/data/info.txt']
95
+ assert crate.payload['fish/data/nested.txt']
96
+ assert crate.payload['fish/data/binary.jpg']
97
97
  assert_equal ['./', 'fish/', 'ro-crate-metadata.jsonld', 'ro-crate-preview.html'], crate.entities.map(&:id).sort
98
98
  end
99
99
 
@@ -101,22 +101,22 @@ class ReaderTest < Test::Unit::TestCase
101
101
  Dir.mktmpdir('test-1234-banana') do |dir|
102
102
  crate = ROCrate::Reader.read_zip(fixture_file('directory.zip'), target_dir: dir)
103
103
 
104
- assert crate.entries['fish/info.txt']
105
- assert crate.entries['fish/info.txt'].source.to_s.include?('/test-1234-banana')
104
+ assert crate.payload['fish/info.txt']
105
+ assert crate.payload['fish/info.txt'].source.to_s.include?('/test-1234-banana')
106
106
  end
107
107
  end
108
108
 
109
109
  test 'reading from directory with directories' do
110
110
  crate = ROCrate::Reader.read_directory(fixture_file('directory_crate').path)
111
111
 
112
- assert crate.entries.values.all? { |e| e.is_a?(ROCrate::Entry) }
113
- assert crate.entries['fish/info.txt']
114
- assert_equal '1234', crate.entries['fish/info.txt'].source.read.chomp
115
- refute crate.entries['fish/root.txt'].directory?
116
- assert crate.entries['fish/data'].directory?
117
- assert crate.entries['fish/data/info.txt']
118
- refute crate.entries['fish/data/nested.txt'].remote?
119
- assert crate.entries['fish/data/binary.jpg']
112
+ assert crate.payload.values.all? { |e| e.is_a?(ROCrate::Entry) }
113
+ assert crate.payload['fish/info.txt']
114
+ assert_equal '1234', crate.payload['fish/info.txt'].source.read.chomp
115
+ refute crate.payload['fish/root.txt'].directory?
116
+ assert crate.payload['fish/data'].directory?
117
+ assert crate.payload['fish/data/info.txt']
118
+ refute crate.payload['fish/data/nested.txt'].remote?
119
+ assert crate.payload['fish/data/binary.jpg']
120
120
  assert_equal ['./', 'fish/', 'ro-crate-metadata.jsonld', 'ro-crate-preview.html'], crate.entities.map(&:id).sort
121
121
  end
122
122
 
@@ -162,37 +162,38 @@ class ReaderTest < Test::Unit::TestCase
162
162
  assert ext_file.source.is_a?(ROCrate::RemoteEntry)
163
163
  assert_equal 'http://example.com/external_ref.txt', ext_file.id
164
164
  assert_equal 'file contents', ext_file.source.read
165
+ assert crate.preview.source.source.is_a?(ROCrate::PreviewGenerator)
165
166
  end
166
167
 
167
168
  test 'reading from directory with unlisted files' do
168
169
  crate = ROCrate::Reader.read_directory(fixture_file('sparse_directory_crate').path)
169
170
 
170
- assert_equal 11, crate.entries.count
171
- assert crate.entries['listed_file.txt']
172
- assert crate.entries['unlisted_file.txt']
173
- assert crate.entries['fish']
174
- assert_equal '1234', crate.entries['fish/info.txt'].source.read.chomp
175
- refute crate.entries['fish/root.txt'].directory?
176
- assert crate.entries['fish/data'].directory?
177
- assert crate.entries['fish/data/info.txt']
178
- refute crate.entries['fish/data/nested.txt'].remote?
179
- assert crate.entries['fish/data/binary.jpg']
171
+ assert_equal 11, crate.payload.count
172
+ assert crate.payload['listed_file.txt']
173
+ assert crate.payload['unlisted_file.txt']
174
+ assert crate.payload['fish']
175
+ assert_equal '1234', crate.payload['fish/info.txt'].source.read.chomp
176
+ refute crate.payload['fish/root.txt'].directory?
177
+ assert crate.payload['fish/data'].directory?
178
+ assert crate.payload['fish/data/info.txt']
179
+ refute crate.payload['fish/data/nested.txt'].remote?
180
+ assert crate.payload['fish/data/binary.jpg']
180
181
  assert_equal ['./', 'listed_file.txt', 'ro-crate-metadata.jsonld', 'ro-crate-preview.html'], crate.entities.map(&:id).sort
181
182
  end
182
183
 
183
184
  test 'reading from a zip with unlisted files' do
184
185
  crate = ROCrate::Reader.read_zip(fixture_file('sparse_directory_crate.zip').path)
185
186
 
186
- assert_equal 11, crate.entries.count
187
- assert crate.entries['listed_file.txt']
188
- assert crate.entries['unlisted_file.txt']
189
- assert crate.entries['fish']
190
- assert_equal '1234', crate.entries['fish/info.txt'].source.read.chomp
191
- refute crate.entries['fish/root.txt'].directory?
192
- assert crate.entries['fish/data'].directory?
193
- assert crate.entries['fish/data/info.txt']
194
- refute crate.entries['fish/data/nested.txt'].remote?
195
- assert crate.entries['fish/data/binary.jpg']
187
+ assert_equal 11, crate.payload.count
188
+ assert crate.payload['listed_file.txt']
189
+ assert crate.payload['unlisted_file.txt']
190
+ assert crate.payload['fish']
191
+ assert_equal '1234', crate.payload['fish/info.txt'].source.read.chomp
192
+ refute crate.payload['fish/root.txt'].directory?
193
+ assert crate.payload['fish/data'].directory?
194
+ assert crate.payload['fish/data/info.txt']
195
+ refute crate.payload['fish/data/nested.txt'].remote?
196
+ assert crate.payload['fish/data/binary.jpg']
196
197
  assert_equal ['./', 'listed_file.txt', 'ro-crate-metadata.jsonld', 'ro-crate-preview.html'], crate.entities.map(&:id).sort
197
198
  end
198
199
 
@@ -201,18 +202,60 @@ class ReaderTest < Test::Unit::TestCase
201
202
  string_io.write(::File.read(fixture_file('sparse_directory_crate.zip').path))
202
203
  string_io.rewind
203
204
  assert string_io.is_a?(StringIO)
204
- assert_equal 11, ROCrate::Reader.read_zip(string_io).entries.count
205
+ assert_equal 11, ROCrate::Reader.read_zip(string_io).payload.count
205
206
 
206
207
  path = Pathname.new(fixture_file('sparse_directory_crate.zip').path)
207
208
  assert path.is_a?(Pathname)
208
- assert_equal 11, ROCrate::Reader.read_zip(path).entries.count
209
+ assert_equal 11, ROCrate::Reader.read_zip(path).payload.count
209
210
 
210
211
  file = ::File.open(fixture_file('sparse_directory_crate.zip').path)
211
212
  assert file.is_a?(::File)
212
- assert_equal 11, ROCrate::Reader.read_zip(file).entries.count
213
+ assert_equal 11, ROCrate::Reader.read_zip(file).payload.count
213
214
 
214
215
  string = fixture_file('sparse_directory_crate.zip').path
215
216
  assert string.is_a?(String)
216
- assert_equal 11, ROCrate::Reader.read_zip(string).entries.count
217
+ assert_equal 11, ROCrate::Reader.read_zip(string).payload.count
218
+ end
219
+
220
+ test 'reading from zip where the crate root is nested somewhere within' do
221
+ crate = ROCrate::Reader.read_zip(fixture_file('nested_directory.zip'))
222
+
223
+ assert crate.payload['fish/info.txt']
224
+ assert_equal '1234', crate.payload['fish/info.txt'].source.read.chomp
225
+ assert crate.payload['fish/root.txt']
226
+ assert crate.payload['fish/data/info.txt']
227
+ assert crate.payload['fish/data/nested.txt']
228
+ assert crate.payload['fish/data/binary.jpg']
229
+ assert_equal ['./', 'fish/', 'ro-crate-metadata.json', 'ro-crate-preview.html'], crate.entities.map(&:id).sort
230
+ end
231
+
232
+ test 'reading preserves any additions to @context' do
233
+ crate = ROCrate::Reader.read_directory(fixture_file('ro-crate-galaxy-sortchangecase').path)
234
+
235
+ context = crate.metadata.context
236
+ assert_equal [
237
+ 'https://w3id.org/ro/crate/1.1/context',
238
+ {
239
+ 'TestSuite' => 'https://w3id.org/ro/terms/test#TestSuite',
240
+ 'TestInstance' => 'https://w3id.org/ro/terms/test#TestInstance',
241
+ 'TestService' => 'https://w3id.org/ro/terms/test#TestService',
242
+ 'TestDefinition' => 'https://w3id.org/ro/terms/test#TestDefinition',
243
+ 'PlanemoEngine' => 'https://w3id.org/ro/terms/test#PlanemoEngine',
244
+ 'JenkinsService' => 'https://w3id.org/ro/terms/test#JenkinsService',
245
+ 'TravisService' => 'https://w3id.org/ro/terms/test#TravisService',
246
+ 'GithubService' => 'https://w3id.org/ro/terms/test#GithubService',
247
+ 'instance' => 'https://w3id.org/ro/terms/test#instance',
248
+ 'runsOn' => 'https://w3id.org/ro/terms/test#runsOn',
249
+ 'resource' => 'https://w3id.org/ro/terms/test#resource',
250
+ 'definition' => 'https://w3id.org/ro/terms/test#definition',
251
+ 'engineVersion' => 'https://w3id.org/ro/terms/test#engineVersion'
252
+ }
253
+ ], context
254
+ end
255
+
256
+ test 'existing preview is used even if not mentioned in metadata' do
257
+ crate = ROCrate::Reader.read_zip(fixture_file('biobb_hpc_workflows-condapack.zip').path)
258
+ assert crate.preview.source.source.is_a?(Pathname)
259
+ assert_equal 80526, crate.preview.source.read.length
217
260
  end
218
261
  end
data/test/test_helper.rb CHANGED
@@ -6,5 +6,9 @@ require 'ro_crate'
6
6
  require 'webmock/test_unit'
7
7
 
8
8
  def fixture_file(name, *args)
9
- ::File.open(::File.join(::File.dirname(__FILE__), 'fixtures', name), *args)
9
+ ::File.open(::File.join(fixture_dir, name), *args)
10
+ end
11
+
12
+ def fixture_dir
13
+ ::File.join(::File.dirname(__FILE__), 'fixtures')
10
14
  end