s3_relay 0.5.0 → 0.7.0

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 (73) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +3 -19
  3. data/app/assets/javascripts/s3_relay.coffee +4 -4
  4. data/app/controllers/s3_relay/uploads_controller.rb +8 -2
  5. data/app/models/s3_relay/upload.rb +1 -1
  6. data/db/migrate/20141009000804_create_s3_relay_uploads.rb +1 -1
  7. data/lib/s3_relay/base.rb +1 -1
  8. data/lib/s3_relay/engine.rb +1 -1
  9. data/lib/s3_relay/private_url.rb +1 -1
  10. data/lib/s3_relay/version.rb +1 -1
  11. data/test/controllers/s3_relay/uploads_controller_test.rb +28 -22
  12. data/test/dummy/{README.rdoc → README.md} +1 -5
  13. data/test/dummy/Rakefile +1 -1
  14. data/test/dummy/app/assets/config/manifest.js +3 -0
  15. data/test/dummy/app/assets/javascripts/application.js +6 -4
  16. data/test/dummy/app/assets/javascripts/cable.js +13 -0
  17. data/test/dummy/app/assets/stylesheets/application.css +5 -5
  18. data/test/dummy/app/channels/application_cable/channel.rb +4 -0
  19. data/test/dummy/app/channels/application_cable/connection.rb +4 -0
  20. data/test/dummy/app/controllers/application_controller.rb +0 -2
  21. data/test/dummy/app/jobs/application_job.rb +2 -0
  22. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  23. data/test/dummy/app/models/application_record.rb +3 -0
  24. data/test/dummy/app/models/product.rb +1 -1
  25. data/test/dummy/app/views/layouts/application.html.erb +9 -9
  26. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  27. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  28. data/test/dummy/bin/rails +6 -1
  29. data/test/dummy/bin/rake +5 -0
  30. data/test/dummy/bin/setup +38 -0
  31. data/test/dummy/bin/spring +17 -0
  32. data/test/dummy/bin/update +29 -0
  33. data/test/dummy/bin/yarn +11 -0
  34. data/test/dummy/config.ru +2 -1
  35. data/test/dummy/config/application.rb +7 -11
  36. data/test/dummy/config/boot.rb +2 -4
  37. data/test/dummy/config/cable.yml +10 -0
  38. data/test/dummy/config/environment.rb +1 -1
  39. data/test/dummy/config/environments/development.rb +24 -7
  40. data/test/dummy/config/environments/production.rb +36 -23
  41. data/test/dummy/config/environments/test.rb +6 -3
  42. data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
  43. data/test/dummy/config/initializers/assets.rb +8 -2
  44. data/test/dummy/config/initializers/cookies_serializer.rb +3 -1
  45. data/test/dummy/config/initializers/wrap_parameters.rb +2 -2
  46. data/test/dummy/config/locales/en.yml +10 -0
  47. data/test/dummy/config/puma.rb +56 -0
  48. data/test/dummy/config/secrets.yml +15 -5
  49. data/test/dummy/config/spring.rb +6 -0
  50. data/test/dummy/db/migrate/20141021002149_create_products.rb +1 -1
  51. data/test/dummy/db/schema.rb +13 -14
  52. data/test/dummy/db/seeds.rb +7 -0
  53. data/test/dummy/log/development.log +60 -20
  54. data/test/dummy/log/test.log +10958 -856
  55. data/test/dummy/package.json +5 -0
  56. data/test/dummy/public/404.html +6 -6
  57. data/test/dummy/public/422.html +6 -6
  58. data/test/dummy/public/500.html +6 -6
  59. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  60. data/test/dummy/public/apple-touch-icon.png +0 -0
  61. data/test/dummy/public/robots.txt +1 -0
  62. data/test/dummy/test/application_system_test_case.rb +5 -0
  63. data/test/dummy/test/test_helper.rb +9 -0
  64. data/test/factories/products.rb +2 -2
  65. data/test/factories/uploads.rb +14 -7
  66. data/test/helpers/s3_relay/uploads_helper_test.rb +7 -4
  67. data/test/lib/s3_relay/model_test.rb +15 -15
  68. data/test/lib/s3_relay/private_url_test.rb +1 -1
  69. data/test/lib/s3_relay/upload_presigner_test.rb +9 -9
  70. data/test/models/s3_relay/upload_test.rb +25 -24
  71. data/test/test_helper.rb +2 -4
  72. metadata +110 -72
  73. data/test/dummy/config/initializers/session_store.rb +0 -3
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "dummy",
3
+ "private": true,
4
+ "dependencies": {}
5
+ }
@@ -4,7 +4,7 @@
4
4
  <title>The page you were looking for doesn't exist (404)</title>
5
5
  <meta name="viewport" content="width=device-width,initial-scale=1">
6
6
  <style>
7
- body {
7
+ .rails-default-error-page {
8
8
  background-color: #EFEFEF;
9
9
  color: #2E2F30;
10
10
  text-align: center;
@@ -12,13 +12,13 @@
12
12
  margin: 0;
13
13
  }
14
14
 
15
- div.dialog {
15
+ .rails-default-error-page div.dialog {
16
16
  width: 95%;
17
17
  max-width: 33em;
18
18
  margin: 4em auto 0;
19
19
  }
20
20
 
21
- div.dialog > div {
21
+ .rails-default-error-page div.dialog > div {
22
22
  border: 1px solid #CCC;
23
23
  border-right-color: #999;
24
24
  border-left-color: #999;
@@ -31,13 +31,13 @@
31
31
  box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
32
  }
33
33
 
34
- h1 {
34
+ .rails-default-error-page h1 {
35
35
  font-size: 100%;
36
36
  color: #730E15;
37
37
  line-height: 1.5em;
38
38
  }
39
39
 
40
- div.dialog > p {
40
+ .rails-default-error-page div.dialog > p {
41
41
  margin: 0 0 1em;
42
42
  padding: 1em;
43
43
  background-color: #F7F7F7;
@@ -54,7 +54,7 @@
54
54
  </style>
55
55
  </head>
56
56
 
57
- <body>
57
+ <body class="rails-default-error-page">
58
58
  <!-- This file lives in public/404.html -->
59
59
  <div class="dialog">
60
60
  <div>
@@ -4,7 +4,7 @@
4
4
  <title>The change you wanted was rejected (422)</title>
5
5
  <meta name="viewport" content="width=device-width,initial-scale=1">
6
6
  <style>
7
- body {
7
+ .rails-default-error-page {
8
8
  background-color: #EFEFEF;
9
9
  color: #2E2F30;
10
10
  text-align: center;
@@ -12,13 +12,13 @@
12
12
  margin: 0;
13
13
  }
14
14
 
15
- div.dialog {
15
+ .rails-default-error-page div.dialog {
16
16
  width: 95%;
17
17
  max-width: 33em;
18
18
  margin: 4em auto 0;
19
19
  }
20
20
 
21
- div.dialog > div {
21
+ .rails-default-error-page div.dialog > div {
22
22
  border: 1px solid #CCC;
23
23
  border-right-color: #999;
24
24
  border-left-color: #999;
@@ -31,13 +31,13 @@
31
31
  box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
32
  }
33
33
 
34
- h1 {
34
+ .rails-default-error-page h1 {
35
35
  font-size: 100%;
36
36
  color: #730E15;
37
37
  line-height: 1.5em;
38
38
  }
39
39
 
40
- div.dialog > p {
40
+ .rails-default-error-page div.dialog > p {
41
41
  margin: 0 0 1em;
42
42
  padding: 1em;
43
43
  background-color: #F7F7F7;
@@ -54,7 +54,7 @@
54
54
  </style>
55
55
  </head>
56
56
 
57
- <body>
57
+ <body class="rails-default-error-page">
58
58
  <!-- This file lives in public/422.html -->
59
59
  <div class="dialog">
60
60
  <div>
@@ -4,7 +4,7 @@
4
4
  <title>We're sorry, but something went wrong (500)</title>
5
5
  <meta name="viewport" content="width=device-width,initial-scale=1">
6
6
  <style>
7
- body {
7
+ .rails-default-error-page {
8
8
  background-color: #EFEFEF;
9
9
  color: #2E2F30;
10
10
  text-align: center;
@@ -12,13 +12,13 @@
12
12
  margin: 0;
13
13
  }
14
14
 
15
- div.dialog {
15
+ .rails-default-error-page div.dialog {
16
16
  width: 95%;
17
17
  max-width: 33em;
18
18
  margin: 4em auto 0;
19
19
  }
20
20
 
21
- div.dialog > div {
21
+ .rails-default-error-page div.dialog > div {
22
22
  border: 1px solid #CCC;
23
23
  border-right-color: #999;
24
24
  border-left-color: #999;
@@ -31,13 +31,13 @@
31
31
  box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
32
  }
33
33
 
34
- h1 {
34
+ .rails-default-error-page h1 {
35
35
  font-size: 100%;
36
36
  color: #730E15;
37
37
  line-height: 1.5em;
38
38
  }
39
39
 
40
- div.dialog > p {
40
+ .rails-default-error-page div.dialog > p {
41
41
  margin: 0 0 1em;
42
42
  padding: 1em;
43
43
  background-color: #F7F7F7;
@@ -54,7 +54,7 @@
54
54
  </style>
55
55
  </head>
56
56
 
57
- <body>
57
+ <body class="rails-default-error-page">
58
58
  <!-- This file lives in public/500.html -->
59
59
  <div class="dialog">
60
60
  <div>
File without changes
@@ -0,0 +1 @@
1
+ # See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
@@ -0,0 +1,5 @@
1
+ require "test_helper"
2
+
3
+ class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
4
+ driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
5
+ end
@@ -0,0 +1,9 @@
1
+ require File.expand_path('../../config/environment', __FILE__)
2
+ require 'rails/test_help'
3
+
4
+ class ActiveSupport::TestCase
5
+ # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
6
+ fixtures :all
7
+
8
+ # Add more helper methods to be used by all tests here...
9
+ end
@@ -1,5 +1,5 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :product do
3
- name "Flux Capacitor"
3
+ name { "Flux Capacitor" }
4
4
  end
5
5
  end
@@ -1,16 +1,23 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :upload, class: "S3Relay::Upload" do
3
- uuid SecureRandom.uuid
4
- filename "cat.png"
5
- content_type "image/png"
6
- upload_type "FileUpload"
3
+ uuid { SecureRandom.uuid }
4
+ end
5
+
6
+ factory :file_upload, parent: :upload do
7
+ filename { "cat.png" }
8
+ content_type { "image/png" }
9
+ upload_type { "FileUpload" }
7
10
  end
8
11
 
9
12
  factory :icon_upload, parent: :upload do
10
- upload_type "IconUpload"
13
+ filename { "cat.png" }
14
+ content_type { "image/png" }
15
+ upload_type { "IconUpload" }
11
16
  end
12
17
 
13
18
  factory :photo_upload, parent: :upload do
14
- upload_type "PhotoUpload"
19
+ filename { "cat.png" }
20
+ content_type { "image/png" }
21
+ upload_type { "PhotoUpload" }
15
22
  end
16
23
  end
@@ -1,27 +1,30 @@
1
1
  require "test_helper"
2
2
 
3
+ include ActionView::Helpers::FormTagHelper
4
+ include S3Relay::UploadsHelper
5
+
3
6
  describe S3Relay::UploadsHelper do
4
- before { @product = FactoryGirl.create(:product) }
7
+ before { @product = FactoryBot.create(:product) }
5
8
 
6
9
  describe "#s3_relay_field" do
7
10
  describe "without options" do
8
11
  it do
9
12
  s3_relay_field(@product, :photo_uploads)
10
- .must_equal %Q{<div class="s3r-container" data-association="photo_uploads" data-disposition=\"inline\" data-parent-id="#{@product.id}" data-parent-type="product"><input class="s3r-field" id="file" name="file" type="file" /><table class="s3r-upload-list"></table></div>}
13
+ .must_equal %Q{<div class="s3r-container" data-parent-type="product" data-parent-id="#{@product.id}" data-association="photo_uploads" data-disposition=\"inline\"><input type="file" name="file" id="file" class="s3r-field" /><table class="s3r-upload-list"></table></div>}
11
14
  end
12
15
  end
13
16
 
14
17
  describe "with multiple: true" do
15
18
  it do
16
19
  s3_relay_field(@product, :photo_uploads, multiple: true)
17
- .must_equal %Q{<div class="s3r-container" data-association="photo_uploads" data-disposition=\"inline\" data-parent-id="#{@product.id}" data-parent-type="product"><input class="s3r-field" id="file" multiple="multiple" name="file" type="file" /><table class="s3r-upload-list"></table></div>}
20
+ .must_equal %Q{<div class="s3r-container" data-parent-type="product" data-parent-id="#{@product.id}" data-association="photo_uploads" data-disposition=\"inline\"><input type="file" name="file" id="file" multiple="multiple" class="s3r-field" /><table class="s3r-upload-list"></table></div>}
18
21
  end
19
22
  end
20
23
 
21
24
  describe "with disposition: attachment" do
22
25
  it do
23
26
  s3_relay_field(@product, :photo_uploads, disposition: :attachment)
24
- .must_equal %Q{<div class="s3r-container" data-association="photo_uploads" data-disposition=\"attachment\" data-parent-id="#{@product.id}" data-parent-type="product"><input class="s3r-field" disposition=\"attachment\" id="file" name="file" type="file" /><table class="s3r-upload-list"></table></div>}
27
+ .must_equal %Q{<div class="s3r-container" data-parent-type="product" data-parent-id="#{@product.id}" data-association="photo_uploads" data-disposition=\"attachment\"><input type="file" name="file" id="file" disposition=\"attachment\" class="s3r-field" /><table class="s3r-upload-list"></table></div>}
25
28
  end
26
29
  end
27
30
  end
@@ -2,19 +2,19 @@ require "test_helper"
2
2
 
3
3
  describe S3Relay::Model do
4
4
  before do
5
- @product = FactoryGirl.build(:product)
5
+ @product = FactoryBot.build(:product)
6
6
  end
7
7
 
8
8
  describe "#s3_relay" do
9
9
 
10
10
  describe "associations" do
11
11
  it "has_one" do
12
- Product.reflect_on_association(:icon_upload).macro
12
+ _(Product.reflect_on_association(:icon_upload).macro)
13
13
  .must_equal(:has_one)
14
14
  end
15
15
 
16
16
  it "has_many" do
17
- Product.reflect_on_association(:photo_uploads).macro
17
+ _(Product.reflect_on_association(:photo_uploads).macro)
18
18
  .must_equal(:has_many)
19
19
  end
20
20
  end
@@ -22,41 +22,41 @@ describe S3Relay::Model do
22
22
  describe "scopes" do
23
23
  before do
24
24
  @product.save
25
- @icon = FactoryGirl.create(:icon_upload, parent: @product)
26
- @photo_1 = FactoryGirl.create(:photo_upload, parent: @product)
27
- @photo_2 = FactoryGirl.create(:photo_upload, parent: @product)
25
+ @icon = FactoryBot.create(:icon_upload, parent: @product)
26
+ @photo_1 = FactoryBot.create(:photo_upload, parent: @product)
27
+ @photo_2 = FactoryBot.create(:photo_upload, parent: @product)
28
28
  end
29
29
 
30
30
  describe "has_one" do
31
- it { @product.icon_upload.must_equal @icon }
31
+ it { _(@product.icon_upload).must_equal @icon }
32
32
  end
33
33
 
34
34
  describe "has_many" do
35
35
  it do
36
- @product.photo_uploads.pluck(:id).sort
36
+ _(@product.photo_uploads.pluck(:id).sort)
37
37
  .must_equal [@photo_1.id, @photo_2.id]
38
38
  end
39
39
  end
40
40
  end
41
41
 
42
42
  describe "virtual attribute for UUID assignment" do
43
- it { @product.must_respond_to :new_photo_uploads_uuids= }
43
+ it { _(@product).must_respond_to :new_photo_uploads_uuids= }
44
44
  end
45
45
 
46
46
  describe "association method" do
47
47
  before do
48
- @product = FactoryGirl.create(:product)
49
- @icon = FactoryGirl.create(:icon_upload)
50
- @photo_1 = FactoryGirl.create(:photo_upload)
51
- @photo_2 = FactoryGirl.create(:photo_upload)
48
+ @product = FactoryBot.create(:product)
49
+ @icon = FactoryBot.create(:icon_upload)
50
+ @photo_1 = FactoryBot.create(:photo_upload)
51
+ @photo_2 = FactoryBot.create(:photo_upload)
52
52
  end
53
53
 
54
54
  describe "has_many" do
55
55
  it do
56
- @product.photo_uploads.must_equal []
56
+ _(@product.photo_uploads).must_equal []
57
57
  @product.new_photo_uploads_uuids = [@photo_1.uuid, @photo_2.uuid]
58
58
  @product.associate_photo_uploads
59
- @product.photo_uploads.must_equal [@photo_1, @photo_2]
59
+ _(@product.photo_uploads).must_equal [@photo_1, @photo_2]
60
60
  end
61
61
  end
62
62
  end
@@ -21,7 +21,7 @@ describe S3Relay::PrivateUrl do
21
21
  time = Time.parse("2014-01-01 12:00am")
22
22
  url = S3Relay::PrivateUrl.new(uuid, file, expires: time).generate
23
23
 
24
- url.must_equal "https://bucket.s3-region.amazonaws.com/123-456-789/Crazy%20%2B%20c@t%20picture.png?AWSAccessKeyId=access-key-id&Expires=1388563200&Signature=8Kp5NL77iycg4CFFwxboo905t%2Fs%3D"
24
+ _(url).must_equal "https://s3.region.amazonaws.com/bucket/123-456-789/Crazy%20%2B%20c@t%20picture.png?AWSAccessKeyId=access-key-id&Expires=1388563200&Signature=8Kp5NL77iycg4CFFwxboo905t%2Fs%3D"
25
25
  end
26
26
  end
27
27
 
@@ -23,15 +23,15 @@ describe S3Relay::UploadPresigner do
23
23
 
24
24
  data = S3Relay::UploadPresigner.new(expires: time).form_data
25
25
 
26
- data["awsaccesskeyid"].must_equal "access-key-id"
27
- data["x_amz_server_side_encryption"].must_equal "AES256"
28
- data["key"].must_equal "#{uuid}/${filename}"
29
- data["success_action_status"].must_equal "201"
30
- data["acl"].must_equal "acl"
31
- data["endpoint"].must_equal "https://bucket.s3-region.amazonaws.com"
32
- data["policy"].length.must_equal 400 # TODO: Improve this
33
- data["signature"].length.must_equal 28 # TODO: Improve this
34
- data["uuid"].must_equal uuid
26
+ _(data["awsaccesskeyid"]).must_equal "access-key-id"
27
+ _(data["x_amz_server_side_encryption"]).must_equal "AES256"
28
+ _(data["key"]).must_equal "#{uuid}/${filename}"
29
+ _(data["success_action_status"]).must_equal "201"
30
+ _(data["acl"]).must_equal "acl"
31
+ _(data["endpoint"]).must_equal "https://s3.region.amazonaws.com/bucket"
32
+ _(data["policy"].length).must_equal 400 # TODO: Improve this
33
+ _(data["signature"].length).must_equal 28 # TODO: Improve this
34
+ _(data["uuid"]).must_equal uuid
35
35
  end
36
36
  end
37
37
 
@@ -2,13 +2,13 @@ require "test_helper"
2
2
 
3
3
  describe S3Relay::Upload do
4
4
  before do
5
- @upload = S3Relay::Upload.new
5
+ @upload = FactoryBot.build(:upload)
6
6
  end
7
7
 
8
8
  describe "associations" do
9
9
  describe "parent" do
10
10
  it do
11
- S3Relay::Upload.reflect_on_association(:parent).macro
11
+ _(S3Relay::Upload.reflect_on_association(:parent).macro)
12
12
  .must_equal :belongs_to
13
13
  end
14
14
  end
@@ -17,35 +17,36 @@ describe S3Relay::Upload do
17
17
  describe "validations" do
18
18
  describe "uuid" do
19
19
  it "validates presence" do
20
+ @upload.uuid = nil
20
21
  @upload.valid?
21
- @upload.errors[:uuid].must_include("can't be blank")
22
+ _(@upload.errors[:uuid]).must_include("can't be blank")
22
23
  end
23
24
 
24
25
  it "validates uniqueness" do
25
- S3Relay::Upload.new(uuid: @upload.uuid).save!(validate: false)
26
+ FactoryBot.create(:file_upload, uuid: @upload.uuid)
26
27
  @upload.valid?
27
- @upload.errors[:uuid].must_include("has already been taken")
28
+ _(@upload.errors[:uuid]).must_include("has already been taken")
28
29
  end
29
30
  end
30
31
 
31
32
  describe "upload_type" do
32
33
  it "validates presence" do
33
34
  @upload.valid?
34
- @upload.errors[:upload_type].must_include("can't be blank")
35
+ _(@upload.errors[:upload_type]).must_include("can't be blank")
35
36
  end
36
37
  end
37
38
 
38
39
  describe "filename" do
39
40
  it "validates presence" do
40
41
  @upload.valid?
41
- @upload.errors[:filename].must_include("can't be blank")
42
+ _(@upload.errors[:filename]).must_include("can't be blank")
42
43
  end
43
44
  end
44
45
 
45
46
  describe "content_type" do
46
47
  it "validates presence" do
47
48
  @upload.valid?
48
- @upload.errors[:content_type].must_include("can't be blank")
49
+ _(@upload.errors[:content_type]).must_include("can't be blank")
49
50
  end
50
51
  end
51
52
 
@@ -53,68 +54,68 @@ describe S3Relay::Upload do
53
54
  it "validates presence" do
54
55
  @upload.pending_at = nil
55
56
  @upload.valid?
56
- @upload.errors[:pending_at].must_include("can't be blank")
57
+ _(@upload.errors[:pending_at]).must_include("can't be blank")
57
58
  end
58
59
  end
59
60
  end
60
61
 
61
62
  describe "scopes" do
62
63
  before do
63
- @pending = S3Relay::Upload.new
64
+ @pending = FactoryBot.build(:file_upload)
64
65
  .tap { |u| u.save(validate: false) }
65
- @imported = S3Relay::Upload.new(state: "imported")
66
+ @imported = FactoryBot.build(:upload, state: "imported")
66
67
  .tap { |u| u.save(validate: false) }
67
68
  end
68
69
 
69
70
  describe "pending" do
70
71
  it do
71
72
  results = S3Relay::Upload.pending.all
72
- results.must_include @pending
73
- results.wont_include @imported
73
+ _(results).must_include @pending
74
+ _(results).wont_include @imported
74
75
  end
75
76
  end
76
77
 
77
78
  describe "imported" do
78
79
  it do
79
80
  results = S3Relay::Upload.imported.all
80
- results.wont_include @pending
81
- results.must_include @imported
81
+ _(results).wont_include @pending
82
+ _(results).must_include @imported
82
83
  end
83
84
  end
84
85
  end
85
86
 
86
87
  describe "upon finalization" do
87
88
  it do
88
- @upload.state.must_equal "pending"
89
- @upload.pending_at.wont_equal nil
89
+ _(@upload.state).must_equal "pending"
90
+ _(@upload.pending_at).wont_equal nil
90
91
  end
91
92
  end
92
93
 
93
94
  describe "#pending?" do
94
- it { @upload.pending?.must_equal true }
95
+ it { _(@upload.pending?).must_equal true }
95
96
  end
96
97
 
97
98
  describe "#imported" do
98
99
  it do
99
100
  @upload.state = "imported"
100
- @upload.imported?.must_equal true
101
+ _(@upload.imported?).must_equal true
101
102
  end
102
103
  end
103
104
 
104
105
  describe "#mark_imported!" do
105
106
  it do
106
107
  @upload.mark_imported!
107
- @upload.state.must_equal "imported"
108
- @upload.imported_at.wont_equal nil
108
+ _(@upload.state).must_equal "imported"
109
+ _(@upload.imported_at).wont_equal nil
109
110
  end
110
111
  end
111
112
 
112
113
  describe "#notify_parent" do
113
- before { @upload = FactoryGirl.build(:upload) }
114
+ before { @upload = FactoryBot.build(:file_upload) }
114
115
 
115
116
  describe "when the parent is associated" do
116
117
  it do
117
- @product = FactoryGirl.create(:product)
118
+ @product = FactoryBot.create(:product)
118
119
  @upload.parent = @product
119
120
  @product.expects(:import_upload)
120
121
  @upload.save
@@ -134,7 +135,7 @@ describe S3Relay::Upload do
134
135
  S3Relay::PrivateUrl.expects(:new).with(uuid, filename).returns(klass)
135
136
  klass.expects(:generate).returns(url)
136
137
 
137
- @upload.private_url.must_equal url
138
+ _(@upload.private_url).must_equal url
138
139
  end
139
140
  end
140
141