Skip to content
This repository was archived by the owner on Jun 11, 2023. It is now read-only.

Commit 30427e5

Browse files
author
Marcelo Amancio de Lima Santos
committed
update BankAccount open and close tests
1 parent 1a2e58e commit 30427e5

19 files changed

Lines changed: 282 additions & 189 deletions

File tree

lib/universe/bank/action/bank.ex

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -105,25 +105,26 @@ defmodule Helix.Universe.Bank.Action.Bank do
105105
to: BankTransferInternal,
106106
as: :abort
107107

108-
@spec open_account(Account.idt, ATM.id) ::
108+
@spec open_account(Account.id, ATM.id) ::
109109
{:ok, BankAccount.t, [BankAccountUpdatedEvent.t]}
110-
| {:error, Ecto.Changeset.t}
110+
| {:error, :internal}
111111
@doc """
112112
Opens a bank account.
113113
"""
114-
def open_account(owner, atm) do
115-
bank =
116-
atm
114+
def open_account(owner, atm_id) do
115+
bank_id =
116+
atm_id
117117
|> EntityQuery.fetch_by_server()
118118
|> Map.get(:entity_id)
119119
|> NPCQuery.fetch()
120+
|> Map.get(:npc_id)
120121

121-
case BankAccountInternal.create(owner, atm, bank) do
122+
case BankAccountInternal.create(owner, atm_id, bank_id) do
122123
{:ok, bank_acc} ->
123124
{:ok, bank_acc, [BankAccountUpdatedEvent.new(bank_acc, :created)]}
124125

125-
error ->
126-
error
126+
{:error, _} ->
127+
{:error, :internal}
127128
end
128129
end
129130

@@ -225,12 +226,12 @@ defmodule Helix.Universe.Bank.Action.Bank do
225226
end
226227
end
227228

228-
@spec change_password(BankAccount.t, Entity.id) ::
229+
@spec change_password(BankAccount.t) ::
229230
{:ok, BankAccount.t, [BankAccountPasswordChangedEvent.t]}
230231
| {:error, :internal}
231-
def change_password(account, changed_by) do
232+
def change_password(account) do
232233
with {:ok, account} <- update_password(account) do
233-
event = BankAccountPasswordChangedEvent.new(account, changed_by)
234+
event = BankAccountPasswordChangedEvent.new(account)
234235

235236
{:ok, account, [event]}
236237
else

lib/universe/bank/action/flow/bank_account.ex

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ defmodule Helix.Universe.Bank.Action.Flow.BankAccount do
33
import HELF.Flow
44

55
alias Helix.Event
6+
alias Helix.Entity.Model.Entity
67
alias Helix.Entity.Query.Entity, as: EntityQuery
78
alias Helix.Network.Action.Flow.Tunnel, as: TunnelFlow
89
alias Helix.Network.Query.Network, as: NetworkQuery
@@ -15,6 +16,8 @@ defmodule Helix.Universe.Bank.Action.Flow.BankAccount do
1516

1617
alias Helix.Universe.Bank.Process.Bank.Account.AccountCreate,
1718
as: BankAccountCreateProcess
19+
alias Helix.Universe.Bank.Process.Bank.Account.AccountClose,
20+
as: BankAccountCloseProcess
1821
alias Helix.Universe.Bank.Process.Bank.Account.RevealPassword,
1922
as: BankAccountRevealPasswordProcess
2023
alias Helix.Universe.Bank.Process.Bank.Account.ChangePassword,
@@ -62,29 +65,36 @@ defmodule Helix.Universe.Bank.Action.Flow.BankAccount do
6265
Starts the `bank_account_create` process.
6366
"""
6467
def open(gateway, account_id, atm, relay) do
65-
entity_id = Entity.ID.cast!(to_string(account_id.id))
68+
entity_id = Entity.ID.cast!(to_string(account_id))
69+
atm_id = atm.server_id
6670

6771
meta = %{
68-
src_atm_id: atm.server_id,
72+
network_id: NetworkQuery.internet().network_id,
73+
bounce: nil,
6974
source_entity_id: entity_id
7075
}
7176

72-
BankAccountCreateProcess.execute(gateway, atm, %{}, meta, relay)
77+
BankAccountCreateProcess.execute(gateway, atm, %{atm_id: atm_id}, meta, relay)
7378
end
7479

75-
@spec close(BankAccount.t) ::
80+
@spec close(Server.t, BankAccount.t, Server.t, relay) ::
7681
{:ok, Process.t}
7782
| BankAccountCloseProcess.executable_error
7883
@doc """
7984
Starts the `bank_account_close` process.
8085
"""
8186
def close(gateway, bank_account, atm, relay) do
8287
meta = %{
83-
src_atm_id: bank_account.server_id,
84-
src_account_number: bank_account.account_number
88+
network_id: NetworkQuery.internet().network_id,
89+
bounce: nil
90+
}
91+
92+
params = %{
93+
atm_id: bank_account.atm_id,
94+
account_number: bank_account.account_number
8595
}
8696

87-
BankAccountCloseProcess.execute(gateway, atm, %{}, meta, relay)
97+
BankAccountCloseProcess.execute(gateway, atm, params, meta, relay)
8898
end
8999

90100
@spec change_password(BankAccount.t, Server.t, Server.t, relay) ::

lib/universe/bank/event/account_close.ex

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,21 @@ defmodule Helix.Universe.Bank.Event.AccountClose do
1717

1818
event_struct [:atm_id, :account_number]
1919

20-
@spec new(ATM.id, BankAccount.account) :: t
21-
22-
def new(atm_id, account_number) do
20+
@spec new(Process.t, AccountCloseProcess.t) :: t
21+
def new(process = %Process{}, data = %AccountCloseProcess{}) do
2322
%__MODULE__{
24-
atm_id: atm_id,
25-
account_number: account_number
23+
atm_id: data.atm_id,
24+
account_number: data.account_number
2625
}
2726
end
2827

29-
@spec new(Process.t, AccountCloseProcess.t) :: t
30-
def new(process = %Process{}, data = %AccountCloseProcess{}) do
28+
@spec new(ATM.id, BankAccount.account):: t
29+
30+
def new(atm_id, account_number) do
3131
%__MODULE__{
32-
atm_id: process.src_atm_id,
33-
account_number: process.src_acc_number
32+
atm_id: atm_id,
33+
account_number: account_number
3434
}
3535
end
3636
end
37+
end

lib/universe/bank/event/account_create.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ defmodule Helix.Universe.Bank.Event.AccountCreate do
3232
@spec new(Process.t, AccountCreateProcess.t) :: t
3333
def new(process = %Process{}, data = %AccountCreateProcess{}) do
3434
%__MODULE__{
35-
atm_id: process.src_atm_id,
35+
atm_id: process.data.atm_id,
3636
requester: process.source_entity_id
3737
}
3838
end
3939
end
40+
end

lib/universe/bank/event/bank/account.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
defmodule Helix.Universe.Bank.Event.Bank.Account do
1+
defmodule Helix.Universe.Bank.Event.Bank.Account do
22

33
import Helix.Event
44

lib/universe/bank/event/bank/account/password.ex

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,61 @@ defmodule Helix.Universe.Bank.Event.Bank.Account.Password do
2222
account: account
2323
}
2424
end
25+
26+
notify do
27+
28+
@event :bank_password_revealed
29+
30+
@doc false
31+
def generate_payload(event, _socket) do
32+
data =
33+
%{
34+
atm_id: event.account.atm_id,
35+
account_number: event.account.account_number,
36+
password: event.account.password
37+
}
38+
end
39+
40+
def whom_to_notify(event),
41+
do: %{account: event.entity_id}
42+
end
2543
end
2644

2745
event Changed do
2846

29-
alias Helix.Entity.Model.Entity
30-
alias Helix.Universe.Bank.Model.BankAccount
47+
alias Helix.Entity.Model.Entity
48+
alias Helix.Universe.Bank.Model.BankAccount
3149

32-
@type t :: %__MODULE__{
33-
entity_id: Entity.id,
34-
account: BankAccount.t
35-
}
50+
@type t :: %__MODULE__{
51+
account: BankAccount.t
52+
}
3653

37-
event_struct [:entity_id, :account]
54+
event_struct [:account]
3855

39-
@spec new(BankAccount.t, Entity.id) ::
40-
t
41-
def new(account = %BankAccount{}, entity_id) do
42-
%__MODULE__{
43-
entity_id: entity_id,
44-
account: account
45-
}
46-
end
56+
@spec new(BankAccount.t) ::
57+
t
58+
def new(account = %BankAccount{}) do
59+
%__MODULE__{
60+
account: account
61+
}
62+
end
63+
64+
notify do
65+
66+
@event :bank_password_changed
67+
68+
@doc false
69+
def generate_payload(event, _socket) do
70+
data =
71+
%{
72+
atm_id: event.account.atm_id,
73+
account_number: event.account.account_number,
74+
password: event.account.password
75+
}
76+
end
77+
78+
def whom_to_notify(event),
79+
do: %{account: event.account.owner_id}
80+
end
4781
end
4882
end

lib/universe/bank/event/bank/account/token.ex

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,24 @@ defmodule Helix.Universe.Bank.Event.Bank.Account.Token do
2929
account: account
3030
}
3131
end
32+
33+
notify do
34+
35+
@event :bank_token_acquired
36+
37+
@doc false
38+
def generate_payload(event, _socket) do
39+
data =
40+
%{
41+
atm_id: to_string(event.account.atm_id),
42+
account_number: to_string(event.account.account_number),
43+
token_id: event.token.token_id
44+
}
45+
end
46+
47+
@doc false
48+
def whom_to_notify(event),
49+
do: %{account: event.entity_id}
50+
end
3251
end
3352
end

lib/universe/bank/event/handler/bank/account.ex

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ defmodule Helix.Universe.Bank.Event.Handler.Bank.Account do
55
alias Helix.Event
66
alias Helix.Entity.Query.Entity, as: EntityQuery
77
alias Helix.Universe.Bank.Action.Bank, as: BankAction
8+
alias Helix.Universe.Bank.Query.Bank, as: BankQuery
89

910
alias Helix.Software.Event.Virus.Collected, as: VirusCollectedEvent
1011
alias Helix.Universe.Bank.Event.Bank.Account.Removed,
@@ -13,6 +14,8 @@ defmodule Helix.Universe.Bank.Event.Handler.Bank.Account do
1314
as: BankAccountUpdatedEvent
1415
alias Helix.Universe.Bank.Event.AccountCreate.Processed,
1516
as: AccountCreateProcessedEvent
17+
alias Helix.Universe.Bank.Event.AccountClose.Processed,
18+
as: AccountCloseProcessedEvent
1619
alias Helix.Universe.Bank.Event.RevealPassword.Processed,
1720
as: RevealPasswordProcessedEvent
1821
alias Helix.Universe.Bank.Event.ChangePassword.Processed,
@@ -24,7 +27,7 @@ defmodule Helix.Universe.Bank.Event.Handler.Bank.Account do
2427
flowing do
2528
with \
2629
{:ok, _bank_account, events} <-
27-
BankAction.open_account(event.requester, event.atm),
30+
BankAction.open_account(event.requester, event.atm_id),
2831
on_success(fn -> Event.emit(events, from: event) end)
2932
do
3033
:ok
@@ -33,12 +36,12 @@ defmodule Helix.Universe.Bank.Event.Handler.Bank.Account do
3336
end
3437

3538
def account_close_processed(event = %AccountCloseProcessedEvent{}) do
36-
flowing
39+
flowing do
3740
with \
38-
bank_account = BankQuery.fetch_account(event.atm_id, event.account_number)
39-
true <- not is_nil(bank_account),
40-
{:ok, events} <- BankAction.close_account(bank_account),
41-
on_success(fn -> Event.emit(events) end)
41+
bank_acc = BankQuery.fetch_account(event.atm_id, event.account_number),
42+
true <- not is_nil(bank_acc),
43+
{:ok, events} <- BankAction.close_account(bank_acc),
44+
on_success(fn -> Event.emit(events, from: event) end)
4245
do
4346
:ok
4447
end
@@ -80,9 +83,7 @@ defmodule Helix.Universe.Bank.Event.Handler.Bank.Account do
8083
with \
8184
changed_by = %{} <- EntityQuery.fetch_by_server(event.gateway_id),
8285
{:ok, _bank_account, events} <-
83-
BankAction.change_password(
84-
event.account, changed_by.entity_id
85-
),
86+
BankAction.change_password(event.account),
8687
on_success(fn -> Event.emit(events, from: event) end)
8788
do
8889
:ok

0 commit comments

Comments
 (0)