Skip to content

Commit 006314f

Browse files
add feature tests
1 parent 2ad3664 commit 006314f

File tree

15 files changed

+563
-67
lines changed

15 files changed

+563
-67
lines changed

cider-ci/specs_job-context.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ generate_tasks:
22
# all of them
33
include_match: spec\/.*_spec.rb
44
# only request specs
5-
include_match: spec\/requests\/.*_spec.rb
5+
# include_match: spec\/requests\/.*_spec.rb
66
# focus on one
77
# include_match: spec.*dashboard_spec.rb
88

spec/config/browser.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ def set_capybara_values
99
Capybara.server_port = port
1010
end
1111

12+
def maximize_window_if_possible
13+
Capybara.page.driver.browser.manage.window.maximize if Capybara.current_driver == :firefox
14+
end
15+
1216
ACCEPTED_FIREFOX_ENV_PATHS = ['FIREFOX_ESR_78_PATH']
1317

1418
def accepted_firefox_path
@@ -33,7 +37,12 @@ def accepted_firefox_path
3337
# profile["intl.accept_languages"] = "en"
3438
#
3539
profile_config = {
36-
'browser.helperApps.neverAsk.saveToDisk' => 'image/jpeg,application/pdf,application/json',
40+
'browser.helperApps.neverAsk.saveToDisk' => %w(
41+
image/jpeg
42+
application/pdf
43+
application/json
44+
text/plain
45+
).join(','),
3746
'browser.download.folderList' => 2, # custom location
3847
'browser.download.dir' => BROWSER_DOWNLOAD_DIR.to_s
3948
}
@@ -71,6 +80,7 @@ def accepted_firefox_path
7180

7281
config.before :all do
7382
set_capybara_values
83+
maximize_window_if_possible
7484
end
7585

7686
config.before :each do |example|

spec/config/session_helper.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
module Config
2+
module SessionHelper
3+
def sign_in
4+
visit "/"
5+
6+
expect(page).to have_content "You are not signed in!"
7+
8+
set_cookie
9+
end
10+
11+
def session_cookie_value
12+
MadekOpenSession.build_session_value(user) if user
13+
end
14+
15+
def set_cookie
16+
Capybara.current_session.driver.browser.manage.add_cookie(
17+
name: "madek-session",
18+
value: session_cookie_value
19+
)
20+
end
21+
end
22+
end

spec/factories/media_store.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,13 @@
66
type { MediaStore::TYPES.without("database").sample }
77

88
trait :database do
9-
id { "database" }
10-
type { "database" }
9+
id "database"
10+
type "database"
11+
end
12+
13+
trait :filesystem do
14+
id "legacy-file-store"
15+
type "filesystem"
1116
end
1217

1318
trait :with_users do

spec/features/dashboard_spec.rb

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,46 @@
1-
require 'spec_helper'
2-
require 'pry'
3-
4-
describe "displaying dashboard", type: :feature do
5-
before do
6-
visit "/"
7-
# TODO there is something missing here
8-
user = User.find_by(login: 'adam')
9-
expect(user).to be
10-
cookie_value = MadekOpenSession.build_session_value(user)
11-
page.driver.browser.manage.add_cookie(name: "madek-session", value: cookie_value)
1+
require "features/shared/authentication_error"
2+
3+
describe "Dashboard", type: :feature do
4+
let(:user) { create(:user, :with_system_admin_role) }
5+
let(:username) do
6+
person = user.person
7+
"#{person.first_name} #{person.last_name}"
8+
end
9+
let(:path) { "/media-service" }
10+
11+
context "for public access" do
12+
before do
13+
visit path
14+
end
15+
16+
it "doesn't display user's dropdown in navbar" do
17+
expect(page).not_to have_css(".navbar a.dropdown-toggle")
18+
end
19+
20+
it_displays "authentication error"
1221
end
1322

14-
it "displays it ;)" do
15-
visit '/media-service/'
23+
context "for signed in user" do
24+
before do
25+
sign_in
26+
visit path
27+
end
28+
29+
it "displays user's dropdown" do
30+
expect(page).to have_css(".navbar a.dropdown-toggle", text: username)
31+
end
32+
end
33+
end
34+
35+
def expect_dashboard_data
36+
within ".top-resources" do
37+
expect(page).to have_link("Media-Stores", href: "/media-service/stores/")
38+
expect(page).to have_link("Settings", href: "/media-service/settings/")
39+
expect(page).to have_link("Uploads", href: "/media-service/uploads/")
40+
end
1641

17-
expect(page).to have_css('.navbar', text: 'Adam Admin')
42+
within ".dev-and-build" do
43+
expect(page).to have_link("Dependency diagram", href: "/media-service/public/deps.svg")
44+
expect(page).to have_link(nil, href: "https://github.com/Madek/madek-media-service")
1845
end
1946
end

spec/features/media_stores_spec.rb

Lines changed: 51 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,75 @@
1-
require 'pry'
1+
require "features/shared/authentication_error"
2+
require "features/shared/authorization_error"
23

34
describe "Media Stores", type: :feature do
5+
let!(:database_store) { create(:media_store, :database) }
6+
let!(:filesystem_store) { create(:media_store, :filesystem) }
7+
let(:path) { "/media-service/stores/" }
48

5-
# TODO user creation seems to be missing
6-
7-
let(:session_cookie_value) do
8-
MadekOpenSession.build_session_value(User.find_by(login: 'adam'))
9-
end
9+
context "for public" do
10+
before do
11+
visit path
12+
end
1013

11-
before do
12-
visit "/"
13-
expect(page).to have_content "You are not singed in!"
14+
it "doesn't display user's dropdown in navbar" do
15+
expect(page).not_to have_css('.navbar a.dropdown-toggle')
16+
end
1417

15-
# page.driver.browser.manage.add_cookie(name: "madek-session", value: cookie_value)
16-
Capybara.current_session.driver.browser.manage.add_cookie(
17-
name: "madek-session",
18-
value: session_cookie_value
19-
)
18+
it_displays "authentication error"
19+
it_displays "authorization error"
2020
end
2121

22-
it "displays it ;)" do
23-
visit '/media-service/'
22+
context "for an ordinary user" do
23+
let(:user) { create(:user) }
2424

25-
find('.navbar .dropdown-toggle').click
26-
click_link 'Media-Stores'
25+
before { sign_in }
2726

28-
expect(page).to have_css('h2', text: 'Media-Stores')
29-
30-
within '#stores-page' do
31-
expect(page).to have_css('table')
32-
within 'table' do
33-
expect(page).to have_css('tr', text: 'legacy-file-store filesystem')
34-
expect(page).to have_css('tr', text: 'database database')
35-
end
36-
end
27+
it_displays "authorization error"
3728
end
3829

39-
it "navigates to store users page" do
40-
visit "/media-service/stores/"
30+
context "for an user with admin role" do
31+
let(:user) { create(:user, :with_admin_role) }
4132

42-
click_link href: '/media-service/stores/legacy-file-store/users/'
33+
before { sign_in }
4334

44-
expect(page).to have_css('h2', text: 'Media-Store legacy-file-store Users')
35+
it_displays "authorization error"
36+
end
4537

46-
page.assert_selector('table.users tbody tr', minimum: 5)
38+
context "for an user with system admin role" do
39+
let(:user) { create(:user, :with_system_admin_role) }
4740

48-
fill_in 'term', with: 'ada'
41+
before do
42+
sign_in
4943

50-
expect(page).to have_css('table.users tbody tr', count: 1)
44+
visit path
45+
end
5146

52-
within '.direct-priority-component' do
53-
expect(page).to have_content '-'
47+
it "is navigable" do
48+
within first(".navbar") do
49+
find(".dropdown-toggle").click
50+
click_link "Media-Stores"
51+
end
5452

55-
click_button 'Edit'
56-
end
53+
expect(current_path).to eq("/media-service/stores/")
54+
expect(page).to have_css("h2", text: "Media-Stores")
5755

58-
expect(page).to have_css('.modal')
59-
fill_in 'direct_priority', with: 5
56+
within '#stores-page' do
57+
expect(page).to have_css('table')
58+
within 'table' do
59+
expect(page).to have_css('tr', text: 'legacy-file-store filesystem')
60+
expect(page).to have_css('tr', text: 'database database')
61+
end
62+
end
63+
end
6064

61-
within('.modal') { click_button 'Save' }
65+
specify "page has links to users" do
66+
expect(page).to have_link("0", href: "/media-service/stores/legacy-file-store/users/")
67+
expect(page).to have_link("0", href: "/media-service/stores/database/users/")
68+
end
6269

63-
expect(page).to have_css('table.users tbody tr', count: 1)
64-
within '.combined-priority-component' do
65-
expect(page).to have_content '5'
70+
specify "page has links to groups" do
71+
expect(page).to have_link("0", href: "/media-service/stores/legacy-file-store/groups/")
72+
expect(page).to have_link("0", href: "/media-service/stores/database/groups/")
6673
end
6774
end
6875
end

spec/features/originals_spec.rb

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
require "features/shared/authentication_error"
2+
3+
shared_examples "media file details" do
4+
it "displays View link" do
5+
expect(page)
6+
.to have_link("View",
7+
href: /\/media-service\/originals\/#{media_file.id}\/content\?download=false$/)
8+
9+
click_link "View"
10+
expect(page.body).to include(file_content)
11+
end
12+
13+
it "displays Download link" do
14+
expect(page)
15+
.to have_link("Download",
16+
href: /\/media-service\/originals\/#{media_file.id}\/content\?download=true$/)
17+
18+
expect(File).not_to exist(BROWSER_DOWNLOAD_DIR + "/small.txt")
19+
20+
click_link "Download"
21+
22+
expect(File).to exist(BROWSER_DOWNLOAD_DIR + "/small.txt")
23+
expect(File.read(BROWSER_DOWNLOAD_DIR + "/small.txt")).to eq(file_content)
24+
end
25+
26+
it "displays filename" do
27+
expect(page).to have_content("Filename\n#{media_file.filename}")
28+
end
29+
30+
it "displays file size" do
31+
expect(page).to have_content "Size\n132.0B"
32+
end
33+
end
34+
35+
describe "Originals", type: :feature do
36+
let(:path) { "/media-service/originals/#{media_file.id}" }
37+
let(:file_path) { "spec/support/files/small.txt" }
38+
let(:file_content) { File.read(file_path) }
39+
40+
before do
41+
FileUtils.rm_f(BROWSER_DOWNLOAD_DIR + "/small.txt")
42+
end
43+
44+
context "for public acccess" do
45+
let(:media_file) { create(:media_file_for_image) }
46+
47+
it_displays "authentication error"
48+
end
49+
50+
context "for signed in user" do
51+
let(:user) { create(:user) }
52+
let(:media_file) { OpenStruct.new(id: upload_file_and_return_id) }
53+
54+
before do
55+
sign_in
56+
visit path
57+
end
58+
59+
it_displays "media file details"
60+
end
61+
end
62+
63+
def upload_file_and_return_id
64+
create(:media_service_setting, upload_min_part_size: 100)
65+
create(:media_store, :database, :with_users, users: [user])
66+
67+
visit "/media-service/uploads/"
68+
69+
within "#uploads-page .form" do
70+
attach_file nil, file_path
71+
end
72+
73+
expect(page).to have_css(".modal-body",
74+
text: /POST \/media-service\/uploads\/[a-z0-9-]+\/complete/)
75+
link_to_original = find_link("Original")
76+
link_to_original[:href]
77+
.match(/\/media-service\/originals\/([a-z0-9-]+)$/)
78+
.captures
79+
.first
80+
end

0 commit comments

Comments
 (0)