1
1
defmodule Algora.Factory do
2
2
@ moduledoc false
3
+ use ExMachina.Ecto , repo: Algora.Repo
4
+
3
5
alias Algora.Accounts.User
4
- alias Algora.Repo
5
6
alias Algora.Reviews.Review
6
7
7
- def build ( :identity ) do
8
+ def identity_factory do
8
9
% Algora.Accounts.Identity {
9
10
id: Nanoid . generate ( ) ,
10
11
provider: "github" ,
11
12
provider_token: ""
12
13
}
13
14
end
14
15
15
- def build ( :user ) do
16
+ def user_factory do
16
17
% User {
17
18
id: Nanoid . generate ( ) ,
18
19
type: :individual ,
19
- email: "erich @example.com",
20
+ email: sequence ( :email , & "enrich #{ & 1 } @example.com") ,
20
21
display_name: "Erlich Bachman" ,
21
- handle: "erich" ,
22
+ handle: sequence ( :handle , & "enrich #{ & 1 } " ) ,
22
23
bio: "Founder of Aviato, Incubator extraordinaire" ,
23
24
avatar_url: "https://algora.io/asset/storage/v1/object/public/mock/erich.jpg" ,
24
25
location: "Palo Alto, CA" ,
@@ -36,13 +37,13 @@ defmodule Algora.Factory do
36
37
}
37
38
end
38
39
39
- def build ( :organization ) do
40
+ def organization_factory do
40
41
% User {
41
42
id: Nanoid . generate ( ) ,
42
43
type: :organization ,
43
-
44
+ email: sequence ( :email , & "piedpiper#{ & 1 } @example.com" ) ,
44
45
display_name: "Pied Piper" ,
45
- handle: "piedpiper" ,
46
+ handle: sequence ( :handle , & "piedpiper#{ & 1 } " ) ,
46
47
bio:
47
48
"Making the world a better place through constructing elegant hierarchies for maximum code re-use and extensibility" ,
48
49
avatar_url: "https://algora.io/asset/storage/v1/object/public/mock/piedpiper-logo.png" ,
@@ -68,37 +69,37 @@ defmodule Algora.Factory do
68
69
}
69
70
end
70
71
71
- def build ( :member ) do
72
+ def member_factory do
72
73
% Algora.Organizations.Member {
73
74
id: Nanoid . generate ( ) ,
74
75
role: :admin
75
76
}
76
77
end
77
78
78
- def build ( :customer ) do
79
+ def customer_factory do
79
80
% Algora.Payments.Customer {
80
81
id: Nanoid . generate ( ) ,
81
82
provider: "stripe" ,
82
- provider_id: "cus_1234567890" ,
83
+ provider_id: sequence ( :cus , & "cus_ #{ & 1 } " ) ,
83
84
provider_meta: % { } ,
84
85
name: "Pied Piper"
85
86
}
86
87
end
87
88
88
- def build ( :payment_method ) do
89
+ def payment_method_factory do
89
90
% Algora.Payments.PaymentMethod {
90
91
id: Nanoid . generate ( ) ,
91
92
provider: "stripe" ,
92
- provider_id: "pm_1234567890" ,
93
- provider_customer_id: "cus_1234567890"
93
+ provider_id: sequence ( :pm , & "pm_ #{ & 1 } " ) ,
94
+ provider_customer_id: sequence ( :cus , & "cus_ #{ & 1 } " )
94
95
}
95
96
end
96
97
97
- def build ( :account ) do
98
+ def account_factory do
98
99
% Algora.Payments.Account {
99
100
id: Nanoid . generate ( ) ,
100
101
provider: "stripe" ,
101
- provider_id: "acct_1234567890" ,
102
+ provider_id: sequence ( :acct , & "acct_ #{ & 1 } " ) ,
102
103
name: "Kevin 'The Carver'" ,
103
104
details_submitted: true ,
104
105
charges_enabled: true ,
@@ -109,7 +110,7 @@ defmodule Algora.Factory do
109
110
}
110
111
end
111
112
112
- def build ( :contract ) do
113
+ def contract_factory do
113
114
id = Nanoid . generate ( )
114
115
115
116
% Algora.Contracts.Contract {
@@ -126,76 +127,76 @@ defmodule Algora.Factory do
126
127
}
127
128
end
128
129
129
- def build ( :transaction ) do
130
+ def transaction_factory do
130
131
% Algora.Payments.Transaction {
131
132
id: Nanoid . generate ( )
132
133
}
133
134
end
134
135
135
- def build ( :timesheet ) do
136
+ def timesheet_factory do
136
137
% Algora.Contracts.Timesheet {
137
138
id: Nanoid . generate ( ) ,
138
139
hours_worked: 40
139
140
}
140
141
end
141
142
142
- def build ( :thread ) do
143
+ def thread_factory do
143
144
% Algora.Chat.Thread {
144
145
id: Nanoid . generate ( ) ,
145
146
title: "Lorem ipsum dolor sit amet"
146
147
}
147
148
end
148
149
149
- def build ( :participant ) do
150
+ def participant_factory do
150
151
% Algora.Chat.Participant {
151
152
id: Nanoid . generate ( ) ,
152
153
last_read_at: DateTime . utc_now ( )
153
154
}
154
155
end
155
156
156
- def build ( :message ) do
157
+ def message_factory do
157
158
% Algora.Chat.Message {
158
159
id: Nanoid . generate ( ) ,
159
160
content: "What's up?"
160
161
}
161
162
end
162
163
163
- def build ( :repository ) do
164
+ def repository_factory do
164
165
% Algora.Workspace.Repository {
165
166
id: Nanoid . generate ( ) ,
166
167
provider: "github" ,
167
- provider_id: "#{ :rand . uniform ( 999_999_999 ) } " ,
168
+ provider_id: sequence ( :provider_id , & "#{ & 1 } " ) ,
168
169
name: "middle-out" ,
169
170
url: "https://github.com/piedpiper/middle-out" ,
170
171
provider_meta: % { }
171
172
}
172
173
end
173
174
174
- def build ( :ticket ) do
175
+ def ticket_factory do
175
176
% Algora.Workspace.Ticket {
176
177
id: Nanoid . generate ( ) ,
177
178
provider: "github" ,
178
- provider_id: "#{ :rand . uniform ( 999_999_999 ) } " ,
179
+ provider_id: sequence ( :provider_id , & "#{ & 1 } " ) ,
179
180
type: :issue ,
180
181
title: "Optimize compression algorithm for large files" ,
181
182
description: "We need to improve performance when handling files over 1GB" ,
182
- number: :rand . uniform ( 100 ) ,
183
- url: "https://github.com/piedpiper/middle-out/issues/1" ,
183
+ number: sequence ( :number , & " #{ & 1 } " ) ,
184
+ url: sequence ( :url , & "https://github.com/piedpiper/middle-out/issues/#{ & 1 } " ) ,
184
185
provider_meta: % { }
185
186
}
186
187
end
187
188
188
- def build ( :bounty ) do
189
+ def bounty_factory do
189
190
% Algora.Bounties.Bounty {
190
191
id: Nanoid . generate ( )
191
192
}
192
193
end
193
194
194
- def build ( :claim ) do
195
+ def claim_factory do
195
196
% Algora.Bounties.Claim {
196
197
id: Nanoid . generate ( ) ,
197
198
provider: "github" ,
198
- provider_id: "#{ :rand . uniform ( 999_999_999 ) } " ,
199
+ provider_id: sequence ( :privider_id , & "#{ & 1 } " ) ,
199
200
type: :code ,
200
201
status: :pending ,
201
202
title: "Implemented compression optimization" ,
@@ -205,7 +206,7 @@ defmodule Algora.Factory do
205
206
}
206
207
end
207
208
208
- def build ( :review ) do
209
+ def review_factory do
209
210
% Review {
210
211
id: Nanoid . generate ( ) ,
211
212
rating: Review . max_rating ( ) ,
@@ -214,18 +215,14 @@ defmodule Algora.Factory do
214
215
end
215
216
216
217
# Convenience API
217
- def build ( factory_name , attributes ) do
218
- factory_name |> build ( ) |> struct! ( attributes )
219
- end
220
-
221
218
def insert! ( factory_name , attributes \\ [ ] ) do
222
- factory_name |> build ( attributes ) |> Repo . insert! ( )
219
+ insert ( factory_name , attributes )
223
220
end
224
221
225
222
def upsert! ( factory_name , conflict_target , attributes \\ [ ] ) do
226
- factory_name
227
- |> build ( attributes )
228
- |> Repo . insert! (
223
+ insert (
224
+ factory_name ,
225
+ attributes ,
229
226
on_conflict: { :replace_all_except , [ :id , :name ] } ,
230
227
conflict_target: conflict_target ,
231
228
returning: true
0 commit comments