Skip to content

Commit 2c49cfa

Browse files
committed
✅ Add classes for FakeServer state change errors
1 parent 4d0ce49 commit 2c49cfa

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

test/net/imap/fake_server/connection_state.rb

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,21 @@
33
class Net::IMAP::FakeServer
44

55
class ConnectionState
6+
Error = Class.new(RuntimeError)
7+
8+
class InvalidStateChange < Error
9+
def initialize(msg = "invalid state change", *args, **change)
10+
msg = "%s: %p" % [msg, change] if change
11+
super(msg, *args)
12+
end
13+
end
14+
15+
class AlreadyLoggedOut < InvalidStateChange
16+
def initialize(msg = "already logged out", *args)
17+
super(msg, *args)
18+
end
19+
end
20+
621
attr_reader :user
722
attr_reader :session
823
attr_reader :enabled
@@ -46,29 +61,30 @@ def selected?; name == :selected end
4661
def logout?; name == :logout end
4762

4863
def authenticate(user)
49-
not_authenticated? or raise "invalid state change"
64+
not_authenticated? or raise InvalidStateChange, name => :authenticated
5065
user or raise ArgumentError
5166
@user = user
5267
end
5368

5469
def select(mbox:, **options)
55-
authenticated? || selected? or raise "invalid state change"
70+
authenticated? || selected? or raise InvalidStateChange, name => :selected
5671
mbox or raise ArgumentError
5772
@session = Session.new mbox: mbox, **options
5873
end
5974

6075
def unselect
61-
selected? or raise "invalid state change"
76+
selected? or raise InvalidStateChange, selected: :authenticated
6277
@session = nil
6378
end
6479

6580
def unauthenticate
66-
authenticated? || selected? or raise "invalid state change"
81+
authenticated? || selected? or
82+
raise InvalidStateChange, name => :not_authenticated
6783
@user = @selected = nil
6884
end
6985

7086
def logout
71-
!logout? or raise "already logged out"
87+
!logout? or raise AlreadyLoggedOut
7288
@logout = true
7389
end
7490

0 commit comments

Comments
 (0)