adyen-admin 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.md +10 -4
- data/README.md +1 -1
- data/VERSION +1 -1
- data/lib/adyen-admin.rb +3 -0
- data/lib/adyen-admin/client.rb +11 -0
- data/lib/adyen-admin/skin.rb +57 -32
- data/spec/adyen-admin/client_spec.rb +12 -0
- data/spec/adyen-admin/skin_spec.rb +137 -112
- data/spec/fixtures/cassettes/Adyen_Admin_Client/_get/raises_authenticated_error_when_not_logged_in.yml +271 -0
- data/spec/fixtures/cassettes/Adyen_Admin_Client/_login/passes_with_correct_username_password.yml +35 -35
- data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_all/freezes_local_skins.yml +292 -0
- data/spec/fixtures/cassettes/Adyen_Admin_Skin/{_all → authenticated/_all}/returns_the_skins.yml +27 -4
- data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_all_remote/returns_the_skins.yml +292 -0
- data/spec/fixtures/cassettes/Adyen_Admin_Skin/{_download → authenticated/_download}/gets_the_file.yml +7 -7
- data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_find/returns_no_skin.yml +292 -0
- data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_find/returns_the_skin.yml +292 -0
- data/spec/fixtures/cassettes/Adyen_Admin_Skin/{_test_url → authenticated/_test_url}/returns_url_to_test.yml +17 -17
- data/spec/fixtures/cassettes/Adyen_Admin_Skin/{_upload → authenticated/_upload}/valid_set/increases_version.yml +119 -96
- data/spec/fixtures/cassettes/Adyen_Admin_Skin/{_version → authenticated/_version}/returns_live_value.yml +4 -4
- data/spec/fixtures/cassettes/Adyen_Admin_Skin/{_version → authenticated/_version}/returns_test_value.yml +5 -5
- data/spec/fixtures/cassettes/Adyen_Admin_Skin/{_version → authenticated/_version}/returns_uploaded_value.yml +8 -8
- data/spec/fixtures/cassettes/login.yml +38 -45
- data/spec/spec_helper.rb +1 -0
- metadata +40 -30
data/CHANGES.md
CHANGED
@@ -2,12 +2,18 @@
|
|
2
2
|
|
3
3
|
## vx.x.x - ???
|
4
4
|
* update Docu
|
5
|
-
* metafile
|
6
|
-
* parent
|
7
|
-
*
|
5
|
+
* parse metafile
|
6
|
+
* parent (instead of base)
|
7
|
+
* add CLI binaries (to compile + upload) -> read from .adyenrc file
|
8
8
|
* make compatible with Live system
|
9
9
|
|
10
|
-
## v0.0.2
|
10
|
+
## v0.0.2
|
11
|
+
* force update remote
|
12
|
+
* .all unions remote + local (no more duplicates)
|
13
|
+
* freeze locals to indicate missing remote endpoint
|
14
|
+
* raise exception when page could not be loaded
|
15
|
+
|
16
|
+
## v0.0.2
|
11
17
|
* cleanup
|
12
18
|
* dep. fix
|
13
19
|
|
data/README.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/lib/adyen-admin.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# Copyright (c) 2012, SoundCloud Ltd., Tobias Bielohlawek
|
2
|
+
|
2
3
|
require 'adyen-admin/client'
|
3
4
|
require 'adyen-admin/skin'
|
4
5
|
|
@@ -6,6 +7,8 @@ module Adyen
|
|
6
7
|
module Admin
|
7
8
|
extend Adyen::Admin::Client
|
8
9
|
|
10
|
+
class AuthenticationError < StandardError; end
|
11
|
+
|
9
12
|
def skin_dir
|
10
13
|
"."
|
11
14
|
end
|
data/lib/adyen-admin/client.rb
CHANGED
@@ -7,6 +7,7 @@ module Adyen
|
|
7
7
|
DASHBOARD = "https://ca-test.adyen.com/ca/ca/overview/default.shtml"
|
8
8
|
|
9
9
|
def login(accountname, username, password)
|
10
|
+
@authenticated = false
|
10
11
|
page = Adyen::Admin.client.get(LOGIN)
|
11
12
|
page = Adyen::Admin.client.submit(page.form.tap do |form|
|
12
13
|
form.j_account = accountname
|
@@ -14,12 +15,22 @@ module Adyen
|
|
14
15
|
form.j_password = password
|
15
16
|
end)
|
16
17
|
raise "Wrong username + password combination" if page.uri.to_s != DASHBOARD
|
18
|
+
@authenticated = true
|
19
|
+
end
|
20
|
+
|
21
|
+
def get(url)
|
22
|
+
client.get(url).tap do |page|
|
23
|
+
raise AuthenticationError unless page.uri.to_s.include?(url)
|
24
|
+
end
|
17
25
|
end
|
18
26
|
|
19
27
|
def client
|
20
28
|
@agent ||= Mechanize.new
|
21
29
|
end
|
22
30
|
|
31
|
+
def authenticated?
|
32
|
+
@authenticated
|
33
|
+
end
|
23
34
|
end
|
24
35
|
end
|
25
36
|
end
|
data/lib/adyen-admin/skin.rb
CHANGED
@@ -13,27 +13,35 @@ module Adyen
|
|
13
13
|
PUBLISH = "https://ca-test.adyen.com/ca/ca/skin/publishskin.shtml?skinCode=%s"
|
14
14
|
SKINS = "https://ca-test.adyen.com/ca/ca/skin/skins.shtml"
|
15
15
|
|
16
|
-
|
16
|
+
attr_reader :code, :name, :path
|
17
17
|
|
18
18
|
def initialize(attributes = {})
|
19
19
|
attributes.each do |key, value|
|
20
20
|
send("#{key}=", value)
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
path = skin_path([code,name].join("-"))
|
25
|
-
end
|
23
|
+
path ||= File.join(Adyen::Admin.skin_dir, [code,name].compact.join("-"))
|
26
24
|
|
27
25
|
raise ArgumentError unless code
|
28
26
|
end
|
29
27
|
|
28
|
+
# union remote and local skins. Local skins are frozen to
|
29
|
+
# indicate no availble remote counter part which avoid update
|
30
30
|
def self.all(path = nil)
|
31
|
-
|
31
|
+
{}.tap do |hash|
|
32
|
+
self.all_remote.each do |skin|
|
33
|
+
hash[skin.code] = skin unless hash[skin.code]
|
34
|
+
end
|
35
|
+
self.all_local(path).each do |skin|
|
36
|
+
hash[skin.code] = skin.freeze unless hash[skin.code]
|
37
|
+
end
|
38
|
+
end.values
|
32
39
|
end
|
33
40
|
|
41
|
+
# fetch all remote skins
|
34
42
|
def self.all_remote
|
35
43
|
@@skins_remote ||= begin
|
36
|
-
page = Adyen::Admin.
|
44
|
+
page = Adyen::Admin.get(SKINS)
|
37
45
|
page.search(".data tbody tr").map do |node|
|
38
46
|
Skin.new({
|
39
47
|
:code => node.search("a")[0].content.strip,
|
@@ -43,45 +51,54 @@ module Adyen
|
|
43
51
|
end
|
44
52
|
end
|
45
53
|
|
54
|
+
# fetch all local skins
|
46
55
|
def self.all_local(path)
|
47
56
|
Dir[File.join(path.to_s, "*")].map do |path|
|
48
57
|
Skin.new(:path => path) rescue nil
|
49
58
|
end.compact
|
50
59
|
end
|
51
60
|
|
61
|
+
# find a skin within remote + local ones
|
52
62
|
def self.find(skin_code)
|
53
|
-
all.select do |skin|
|
63
|
+
self.all.select do |skin|
|
54
64
|
skin.code == skin_code
|
55
65
|
end.first
|
56
66
|
end
|
57
67
|
|
68
|
+
def self.purge_cache
|
69
|
+
@@skins_remote = nil
|
70
|
+
end
|
71
|
+
|
58
72
|
##################################
|
73
|
+
|
59
74
|
def path=(path)
|
60
75
|
if Skin.is_skin_path?(path)
|
61
|
-
|
62
|
-
self.code ||=
|
63
|
-
self.name ||=
|
64
|
-
raise ArgumentError if code && self.code !=
|
76
|
+
new_code, new_name = File.basename(path).split("-").reverse
|
77
|
+
self.code ||= new_code
|
78
|
+
self.name ||= new_name
|
79
|
+
raise ArgumentError if self.code && self.code != new_code
|
65
80
|
@path = path
|
66
81
|
end
|
67
82
|
end
|
68
83
|
|
84
|
+
##################################
|
85
|
+
|
69
86
|
def version(scope = :local)
|
70
87
|
case scope
|
71
88
|
when :test
|
72
|
-
page = Adyen::Admin.
|
89
|
+
page = Adyen::Admin.get(VERSION_TEST % code)
|
73
90
|
page.search("body p").first.content.scan(/Version:(\d+)/).flatten.first.to_i
|
74
91
|
when :live
|
75
|
-
page = Adyen::Admin.
|
92
|
+
page = Adyen::Admin.get(VERSION_LIVE % code)
|
76
93
|
page.search("body p").first.content.scan(/Version:(\d+)/).flatten.first.to_i
|
77
94
|
else
|
78
|
-
page = Adyen::Admin.
|
95
|
+
page = Adyen::Admin.get(TEST % code)
|
79
96
|
page.search(".data tr td")[2].content.to_i
|
80
97
|
end
|
81
98
|
end
|
82
99
|
|
83
100
|
def test_url(options = {})
|
84
|
-
page = Adyen::Admin.
|
101
|
+
page = Adyen::Admin.get(TEST % code)
|
85
102
|
page = Adyen::Admin.client.submit(page.form.tap do |form|
|
86
103
|
#:amount => 199, :currency => :shopper_locale, :country_code, :merchant_reference, :merchant_account, :system, :skip, :one_page
|
87
104
|
end)
|
@@ -120,25 +137,28 @@ module Adyen
|
|
120
137
|
zipfile.add(file.sub(path, code), file)
|
121
138
|
end
|
122
139
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
end
|
140
|
+
dir = File.join(File.dirname(path), parent_skin_code)
|
141
|
+
Dir["#{dir}/**/**"].each do |file|
|
142
|
+
begin
|
143
|
+
next if file.include?(".yml")
|
144
|
+
next if file.include?(".erb")
|
145
|
+
zipfile.add(file.sub(dir, code), file)
|
146
|
+
rescue Zip::ZipEntryExistsError
|
147
|
+
# NOOP
|
132
148
|
end
|
133
149
|
end
|
134
150
|
end
|
135
151
|
end
|
136
152
|
end
|
137
153
|
|
154
|
+
def parent_skin_code
|
155
|
+
"base"
|
156
|
+
end
|
157
|
+
|
138
158
|
# http://stackoverflow.com/questions/3420587/ruby-mechanize-multipart-form-with-file-upload-to-a-mediawiki
|
139
159
|
def upload
|
140
160
|
file = self.compile
|
141
|
-
page = Adyen::Admin.
|
161
|
+
page = Adyen::Admin.get(UPLOAD % code)
|
142
162
|
page = Adyen::Admin.client.submit(page.form.tap do |form|
|
143
163
|
form.file_uploads.first.file_name = file
|
144
164
|
end)
|
@@ -149,25 +169,30 @@ module Adyen
|
|
149
169
|
def publish
|
150
170
|
raise ArgumentError unless code
|
151
171
|
|
152
|
-
page = Adyen::Admin.
|
172
|
+
page = Adyen::Admin.get(PUBLISH % code)
|
153
173
|
page = Adyen::Admin.client.submit(page.form.tap do |form|
|
154
174
|
end)
|
155
175
|
end
|
156
176
|
|
157
177
|
#################################
|
158
178
|
|
159
|
-
def
|
160
|
-
|
161
|
-
File.join(skin_dir, skin_code).tap do |path|
|
162
|
-
return nil unless File.directory?(path)
|
163
|
-
end
|
179
|
+
def to_s
|
180
|
+
self.code
|
164
181
|
end
|
165
182
|
|
166
183
|
def ==(skin)
|
167
184
|
self.code == skin.code
|
168
185
|
end
|
169
186
|
|
170
|
-
|
187
|
+
protected
|
188
|
+
def code=(c)
|
189
|
+
@code = c
|
190
|
+
end
|
191
|
+
|
192
|
+
def name=(n)
|
193
|
+
@name = n
|
194
|
+
end
|
195
|
+
|
171
196
|
def self.is_skin_path?(path)
|
172
197
|
%w(skin.html.erb inc css js).each do |sub_path|
|
173
198
|
return true if File.exists?(File.join(path, sub_path))
|
@@ -5,6 +5,10 @@ require "adyen-admin/client"
|
|
5
5
|
describe Adyen::Admin::Client, :vcr do
|
6
6
|
let(:login) { Adyen::Admin.login("SoundCloud", "skinadmin", "12312311") }
|
7
7
|
|
8
|
+
before do
|
9
|
+
Adyen::Admin.client.cookie_jar.clear!
|
10
|
+
end
|
11
|
+
|
8
12
|
describe "#login" do
|
9
13
|
it 'passes with correct username + password' do
|
10
14
|
expect do
|
@@ -18,4 +22,12 @@ describe Adyen::Admin::Client, :vcr do
|
|
18
22
|
end
|
19
23
|
end
|
20
24
|
end
|
25
|
+
|
26
|
+
describe "#get" do
|
27
|
+
it 'raises authenticated error when not logged in' do
|
28
|
+
expect do
|
29
|
+
Adyen::Admin.get(Adyen::Admin::Skin::SKINS)
|
30
|
+
end.to raise_error Adyen::Admin::AuthenticationError
|
31
|
+
end
|
32
|
+
end
|
21
33
|
end
|
@@ -9,166 +9,191 @@ module Adyen::Admin
|
|
9
9
|
let(:skin_code) { "7hFAQnmt" }
|
10
10
|
let(:skin) { Skin.new(:code => skin_code, :name => "example") }
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
context "authenticated" do
|
13
|
+
before(:all) do
|
14
|
+
VCR.use_cassette("login") do
|
15
|
+
Adyen::Admin.client.cookie_jar.clear!
|
16
|
+
Adyen::Admin.login("SoundCloud", "skinadmin", "12312311")
|
17
|
+
end
|
15
18
|
end
|
16
|
-
end
|
17
19
|
|
18
|
-
|
19
|
-
|
20
|
-
Skin.all.should == [
|
21
|
-
skin,
|
22
|
-
Skin.new(:code => "Kx9axnRf", :name => "demo")
|
23
|
-
]
|
20
|
+
before do
|
21
|
+
Adyen::Admin::Skin.purge_cache
|
24
22
|
end
|
25
|
-
end
|
26
23
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
24
|
+
describe ".all_remote" do
|
25
|
+
it 'returns the skins' do
|
26
|
+
Skin.all.should == [
|
27
|
+
skin,
|
28
|
+
Skin.new(:code => "Kx9axnRf", :name => "demo"),
|
29
|
+
Skin.new(:code => "vQW0fEo8", :name => "test"),
|
30
|
+
]
|
31
|
+
end
|
35
32
|
end
|
36
|
-
end
|
37
33
|
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
describe ".all_local" do
|
35
|
+
it 'returns the skins' do
|
36
|
+
Skin.all_local(skin_fixtures).should == [
|
37
|
+
Skin.new(:code => "base"),
|
38
|
+
Skin.new(:code => "DV3tf95f"),
|
39
|
+
skin,
|
40
|
+
Skin.new(:code => "JH0815"),
|
41
|
+
]
|
42
|
+
end
|
41
43
|
end
|
42
44
|
|
43
|
-
|
44
|
-
|
45
|
+
describe ".all" do
|
46
|
+
it 'returns the skins' do
|
47
|
+
Skin.all(skin_fixtures).should == [
|
48
|
+
skin,
|
49
|
+
Skin.new(:code => "Kx9axnRf", :name => "demo"),
|
50
|
+
Skin.new(:code => "vQW0fEo8", :name => "test"),
|
51
|
+
Skin.new(:code => "base"),
|
52
|
+
Skin.new(:code => "DV3tf95f"),
|
53
|
+
Skin.new(:code => "JH0815")
|
54
|
+
]
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'freezes local skins' do
|
58
|
+
Skin.all(skin_fixtures).last.should be_frozen
|
59
|
+
end
|
45
60
|
end
|
46
|
-
end
|
47
61
|
|
48
|
-
describe "#new" do
|
49
|
-
let(:path) { "#{skin_fixtures}/example-7hFAQnmt" }
|
50
62
|
|
51
|
-
|
52
|
-
|
53
|
-
|
63
|
+
describe ".find" do
|
64
|
+
it 'returns the skin' do
|
65
|
+
Skin.find(skin_code).should == skin
|
66
|
+
end
|
54
67
|
|
55
|
-
|
56
|
-
|
68
|
+
it 'returns no skin' do
|
69
|
+
Skin.find("dummy code").should == nil
|
70
|
+
end
|
57
71
|
end
|
58
72
|
|
59
|
-
|
60
|
-
|
61
|
-
end
|
73
|
+
describe "#new" do
|
74
|
+
let(:path) { "#{skin_fixtures}/example-7hFAQnmt" }
|
62
75
|
|
63
|
-
|
64
|
-
|
65
|
-
|
76
|
+
it "sets code attribute" do
|
77
|
+
Skin.new(:code => skin_code).code.should == skin_code
|
78
|
+
end
|
66
79
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
end.to raise_error
|
71
|
-
end
|
80
|
+
it "sets name attribute" do
|
81
|
+
Skin.new(:code => skin_code, :name => "name").name.should == "name"
|
82
|
+
end
|
72
83
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
end.to raise_error
|
77
|
-
end
|
78
|
-
end
|
84
|
+
it "sets path attribute" do
|
85
|
+
Skin.new(:path => path).path.should == path
|
86
|
+
end
|
79
87
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
`rm -rf #{zip_filename}`
|
84
|
-
end
|
88
|
+
it "auto sets code from path" do
|
89
|
+
Skin.new(:path => path).code.should == "7hFAQnmt"
|
90
|
+
end
|
85
91
|
|
86
|
-
|
87
|
-
|
88
|
-
|
92
|
+
it "raises error on wrong code for path" do
|
93
|
+
expect do
|
94
|
+
Skin.new(:code => "different", :path => path).path.should == path
|
95
|
+
end.to raise_error
|
96
|
+
end
|
97
|
+
|
98
|
+
it "raises error on empty code" do
|
99
|
+
expect do
|
100
|
+
Skin.new
|
101
|
+
end.to raise_error
|
102
|
+
end
|
89
103
|
end
|
90
|
-
end
|
91
104
|
|
92
|
-
|
93
|
-
|
94
|
-
|
105
|
+
describe "#download" do
|
106
|
+
let(:zip_filename) { "#{skin.code}.zip"}
|
107
|
+
after do
|
108
|
+
`rm -rf #{zip_filename}`
|
109
|
+
end
|
95
110
|
|
96
|
-
|
97
|
-
|
98
|
-
|
111
|
+
it "gets the file" do
|
112
|
+
skin.download
|
113
|
+
File.should be_exists(zip_filename)
|
99
114
|
end
|
100
|
-
false
|
101
115
|
end
|
102
116
|
|
103
|
-
|
104
|
-
|
105
|
-
|
117
|
+
describe "#compile" do
|
118
|
+
let(:skin_code) { "DV3tf95f" }
|
119
|
+
let(:skin) { Skin.new(:path => "#{skin_fixtures}/#{skin_code}") }
|
120
|
+
|
121
|
+
def zip_contains(zip_filename, file)
|
122
|
+
Zip::ZipFile.open(zip_filename, 'r') do |zipfile|
|
123
|
+
return true if zipfile.find_entry(File.join(skin_code, file))
|
124
|
+
end
|
125
|
+
false
|
106
126
|
end
|
107
127
|
|
108
|
-
|
109
|
-
|
128
|
+
context "without base" do
|
129
|
+
before do
|
130
|
+
`mv #{skin_fixtures}/base #{skin_fixtures}/base2`
|
131
|
+
end
|
132
|
+
|
133
|
+
after do
|
134
|
+
`mv #{skin_fixtures}/base2 #{skin_fixtures}/base`
|
135
|
+
end
|
136
|
+
|
137
|
+
it "includes screen file" do
|
138
|
+
zip_contains(skin.compile, "css/screen.css").should be_true
|
139
|
+
end
|
140
|
+
|
141
|
+
it "excludes print files" do
|
142
|
+
zip_contains(skin.compile, "css/print.css").should_not be_true
|
143
|
+
end
|
110
144
|
end
|
111
145
|
|
112
146
|
it "includes screen file" do
|
113
147
|
zip_contains(skin.compile, "css/screen.css").should be_true
|
114
148
|
end
|
115
149
|
|
116
|
-
it "
|
117
|
-
zip_contains(skin.compile, "css/print.css").
|
150
|
+
it "includes print file" do
|
151
|
+
zip_contains(skin.compile, "css/print.css").should be_true
|
118
152
|
end
|
119
|
-
end
|
120
|
-
|
121
|
-
it "includes screen file" do
|
122
|
-
zip_contains(skin.compile, "css/screen.css").should be_true
|
123
|
-
end
|
124
153
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
it "excludes meta file" do
|
130
|
-
zip_contains(skin.compile, "metadata.yml").should_not be_true
|
131
|
-
end
|
154
|
+
it "excludes meta file" do
|
155
|
+
zip_contains(skin.compile, "metadata.yml").should_not be_true
|
156
|
+
end
|
132
157
|
|
133
|
-
|
134
|
-
|
158
|
+
it "excludes skin file" do
|
159
|
+
zip_contains(skin.compile, "skin.html.erb").should_not be_true
|
160
|
+
end
|
135
161
|
end
|
136
|
-
end
|
137
162
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
163
|
+
describe "#upload" do
|
164
|
+
context "valid set" do
|
165
|
+
it "increases version" do
|
166
|
+
skin.path = "#{skin_fixtures}/example-7hFAQnmt"
|
142
167
|
|
143
|
-
|
144
|
-
|
145
|
-
|
168
|
+
expect do
|
169
|
+
skin.upload
|
170
|
+
end.to change { skin.version }.by(1)
|
171
|
+
end
|
146
172
|
end
|
147
173
|
end
|
148
|
-
end
|
149
174
|
|
150
|
-
|
151
|
-
|
175
|
+
describe "#version" do
|
176
|
+
let(:skin) { Skin.new(:code => "Kx9axnRf", :name => "demo") }
|
152
177
|
|
153
|
-
|
154
|
-
|
155
|
-
|
178
|
+
it "returns uploaded value" do
|
179
|
+
skin.version.should == 14
|
180
|
+
end
|
156
181
|
|
157
|
-
|
158
|
-
|
159
|
-
|
182
|
+
it "returns test value" do
|
183
|
+
skin.version(:test).should == 14
|
184
|
+
end
|
160
185
|
|
161
|
-
|
162
|
-
|
186
|
+
it "returns live value" do
|
187
|
+
skin.version(:live).should == 0
|
188
|
+
end
|
163
189
|
end
|
164
|
-
end
|
165
190
|
|
166
|
-
|
167
|
-
|
168
|
-
|
191
|
+
describe "#test_url" do
|
192
|
+
it "returns url to test" do
|
193
|
+
skin.test_url.to_s.should include("https://test.adyen.com/hpp/select.shtml")
|
194
|
+
end
|
195
|
+
#todo test with options
|
169
196
|
end
|
170
|
-
#todo test with options
|
171
197
|
end
|
172
|
-
|
173
198
|
end
|
174
199
|
end
|