Skip to content

Commit 7eb8696

Browse files
Authenticate during client initialization
Automatically authenticate when creating new client instead of lazy auth. Moved validation checks to initialization and removed session validation middleware. This ensures authentication state is known immediately when creating a client instance.
1 parent da982a1 commit 7eb8696

File tree

5 files changed

+29
-31
lines changed

5 files changed

+29
-31
lines changed

lib/fripa/client.rb

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def initialize(username:, password:, config: nil)
1515
@config = config || Fripa.config
1616
@username = username
1717
@password = password
18-
@session_cookie = nil
18+
@session_cookie = authenticator.login!
1919
end
2020

2121
def users
@@ -31,8 +31,6 @@ def authenticator
3131
end
3232

3333
def call(method, args = [], options = {})
34-
validate_session!
35-
3634
response = perform_request(method, args, options)
3735

3836
raise ConnectionError, "API call failed: #{response.status}" unless response.success?
@@ -42,12 +40,6 @@ def call(method, args = [], options = {})
4240

4341
private
4442

45-
def validate_session!
46-
return if session_cookie
47-
48-
self.session_cookie = authenticator.login!
49-
end
50-
5143
def perform_request(method, args, options)
5244
connection.post(API_PATH) do |request|
5345
request.headers["Content-Type"] = "application/json"

test/test_authenticator.rb

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,25 @@
55
class TestAuthenticator < Minitest::Test
66
def setup
77
Fripa.config = Fripa::Configuration.new(host: "ipa.demo1.freeipa.org")
8-
@client = Fripa::Client.new(username: "admin", password: "Secret123")
8+
VCR.use_cassette("authenticator/login_success") do
9+
@client = Fripa::Client.new(username: "admin", password: "Secret123")
10+
end
911
end
1012

1113
def test_authenticator_returns_client
1214
assert_equal @client, @client.authenticator.client
1315
end
1416

1517
def test_login_raises_on_blank_username
16-
client = Fripa::Client.new(username: "", password: "Secret123")
17-
1818
error = assert_raises(ArgumentError) do
19-
client.authenticator.login!
19+
Fripa::Client.new(username: "", password: "Secret123")
2020
end
2121
assert_equal "Username cannot be blank", error.message
2222
end
2323

2424
def test_login_raises_on_blank_password
25-
client = Fripa::Client.new(username: "admin", password: nil)
26-
2725
error = assert_raises(ArgumentError) do
28-
client.authenticator.login!
26+
Fripa::Client.new(username: "admin", password: nil)
2927
end
3028
assert_equal "Password cannot be blank", error.message
3129
end
@@ -40,11 +38,9 @@ def test_login_success
4038
end
4139

4240
def test_login_with_invalid_credentials
43-
client = Fripa::Client.new(username: "admin", password: "WrongPassword")
44-
4541
VCR.use_cassette("authenticator/login_invalid_credentials") do
4642
error = assert_raises(Fripa::AuthenticationError) do
47-
client.authenticator.login!
43+
Fripa::Client.new(username: "admin", password: "WrongPassword")
4844
end
4945
assert_match(/Login failed/, error.message)
5046
end

test/test_client.rb

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,28 @@
55
class TestClient < Minitest::Test
66
def setup
77
Fripa.config = Fripa::Configuration.new(host: "ipa.demo1.freeipa.org")
8-
@client = Fripa::Client.new(username: "admin", password: "Secret123")
8+
VCR.use_cassette("authenticator/login_success") do
9+
@client = Fripa::Client.new(username: "admin", password: "Secret123")
10+
end
911
end
1012

1113
def test_initialize_with_credentials
12-
client = Fripa::Client.new(username: "testuser", password: "testpass")
13-
assert_equal "testuser", client.username
14-
assert_equal "testpass", client.password
15-
assert_equal Fripa.config, client.config
14+
VCR.use_cassette("authenticator/login_success") do
15+
client = Fripa::Client.new(username: "testuser", password: "testpass")
16+
assert_equal "testuser", client.username
17+
assert_equal "testpass", client.password
18+
assert_equal Fripa.config, client.config
19+
end
1620
end
1721

1822
def test_initialize_with_custom_config
19-
custom_config = Fripa::Configuration.new(host: "custom.example.com")
20-
client = Fripa::Client.new(username: "admin", password: "secret", config: custom_config)
21-
assert_equal custom_config, client.config
22-
assert_equal "admin", client.username
23-
assert_equal "secret", client.password
23+
custom_config = Fripa::Configuration.new(host: "ipa.demo1.freeipa.org", verify_ssl: false)
24+
VCR.use_cassette("authenticator/login_success") do
25+
client = Fripa::Client.new(username: "admin", password: "secret", config: custom_config)
26+
assert_equal custom_config, client.config
27+
assert_equal "admin", client.username
28+
assert_equal "secret", client.password
29+
end
2430
end
2531

2632
def test_call_authenticates_automatically_if_no_session

test/test_group_resource.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
class TestGroupResource < Minitest::Test
66
def setup
77
Fripa.config = Fripa::Configuration.new(host: "ipa.demo1.freeipa.org")
8-
@client = Fripa::Client.new(username: "admin", password: "Secret123")
8+
VCR.use_cassette("authenticator/login_success") do
9+
@client = Fripa::Client.new(username: "admin", password: "Secret123")
10+
end
911
end
1012

1113
def test_find_all_groups

test/test_user_resource.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
class TestUserResource < Minitest::Test
66
def setup
77
Fripa.config = Fripa::Configuration.new(host: "ipa.demo1.freeipa.org")
8-
@client = Fripa::Client.new(username: "admin", password: "Secret123")
8+
VCR.use_cassette("authenticator/login_success") do
9+
@client = Fripa::Client.new(username: "admin", password: "Secret123")
10+
end
911
end
1012

1113
def test_find_all_users

0 commit comments

Comments
 (0)