Skip to content

Commit 56a8549

Browse files
committed
fix: failing tests
1 parent 280c029 commit 56a8549

File tree

8 files changed

+122
-93
lines changed

8 files changed

+122
-93
lines changed

guard/lib/guard/front_repo/service_account.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ defmodule Guard.FrontRepo.ServiceAccount do
3333
)
3434
|> foreign_key_constraint(:id, name: :service_accounts_id_fkey)
3535
|> foreign_key_constraint(:creator_id, name: :service_accounts_creator_id_fkey)
36+
|> unique_constraint(:id, name: :service_accounts_pkey)
3637
end
3738

3839
@doc """

guard/lib/guard/front_repo/user.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ defmodule Guard.FrontRepo.User do
7878
:visited_at
7979
])
8080
|> validate_required([:email, :name])
81+
|> validate_length(:name, max: 255, message: "Name cannot exceed 255 characters")
8182
|> validate_format(:email, ~r/^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i,
8283
message: "is not a valid email"
8384
)
@@ -257,6 +258,7 @@ defmodule Guard.FrontRepo.User do
257258
:idempotency_token
258259
])
259260
|> validate_required([:email, :name, :creation_source, :org_id])
261+
|> validate_length(:name, max: 255, message: "Name cannot exceed 255 characters")
260262
|> validate_inclusion(:creation_source, [:service_account])
261263
|> put_change(:single_org_user, true)
262264
|> validate_format(:email, ~r/^[\w\-\.]+@sa\.[\w\-\.]+\.semaphoreci\.com$/i,

guard/lib/guard/store/service_account.ex

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -149,15 +149,20 @@ defmodule Guard.Store.ServiceAccount do
149149
@spec delete(String.t()) :: {:ok, :deleted} | {:error, :not_found | :internal_error}
150150
def delete(service_account_id) when is_binary(service_account_id) do
151151
if valid_uuid?(service_account_id) do
152-
FrontRepo.transaction(fn ->
152+
case FrontRepo.transaction(fn ->
153153
with {:ok, current_data} <- find(service_account_id),
154154
{:ok, _updated_user} <- deactivate_user_record(service_account_id) do
155155
:deleted
156156
else
157-
{:error, reason} ->
158-
FrontRepo.rollback(reason)
157+
{:error, :not_found} ->
158+
FrontRepo.rollback(:not_found)
159+
{:error, _reason} ->
160+
FrontRepo.rollback(:internal_error)
159161
end
160-
end)
162+
end) do
163+
{:ok, :deleted} -> {:ok, :deleted}
164+
{:error, reason} -> {:error, reason}
165+
end
161166
else
162167
{:error, :invalid_id}
163168
end
@@ -216,8 +221,6 @@ defmodule Guard.Store.ServiceAccount do
216221
description: sa.description,
217222
org_id: u.org_id,
218223
creator_id: sa.creator_id,
219-
created_at: sa.created_at,
220-
updated_at: sa.updated_at,
221224
deactivated: u.deactivated,
222225
email: u.email
223226
}
@@ -252,6 +255,8 @@ defmodule Guard.Store.ServiceAccount do
252255
authentication_token: hashed_token
253256
}
254257

258+
require Logger
259+
Logger.info("User params: #{inspect(user_params)}")
255260
changeset = User.changeset(%User{}, user_params)
256261

257262
case FrontRepo.insert(changeset) do
@@ -377,11 +382,10 @@ defmodule Guard.Store.ServiceAccount do
377382
description: service_account.description,
378383
org_id: user.org_id,
379384
creator_id: service_account.creator_id,
380-
created_at: service_account.created_at,
381-
updated_at: service_account.updated_at,
382385
deactivated: user.deactivated,
383386
user_id: user.id,
384-
email: user.email
387+
email: user.email,
388+
user: user
385389
}
386390
end
387391
end

guard/priv/front_repo/migrations/20250716010415_create_service_accounts.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ defmodule Guard.FrontRepo.Migrations.CreateServiceAccounts do
55
create table(:service_accounts, primary_key: false) do
66
add :id, references(:users, type: :binary_id, on_delete: :delete_all),
77
primary_key: true, null: false
8-
add :description, :string
8+
add :description, :string, size: 500
99
add :creator_id, references(:users, type: :binary_id, on_delete: :nilify_all),
1010
null: false
1111
end

guard/test/guard/front_repo/service_account_test.exs

Lines changed: 63 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ defmodule Guard.FrontRepo.ServiceAccountTest do
99
user = create_test_user()
1010

1111
attrs = %{
12-
user_id: user.id,
12+
id: user.id,
1313
description: "Test service account description",
14-
creator_id: Ecto.UUID.generate()
14+
creator_id: user.id
1515
}
1616

1717
changeset = ServiceAccount.changeset(%ServiceAccount{}, attrs)
1818

1919
assert changeset.valid?
20-
assert changeset.changes.user_id == user.id
20+
assert changeset.changes.id == user.id
2121
assert changeset.changes.description == "Test service account description"
2222
assert changeset.changes.creator_id == attrs.creator_id
2323
end
@@ -26,21 +26,23 @@ defmodule Guard.FrontRepo.ServiceAccountTest do
2626
user = create_test_user()
2727

2828
attrs = %{
29-
user_id: user.id
29+
id: user.id,
30+
creator_id: user.id
3031
}
3132

3233
changeset = ServiceAccount.changeset(%ServiceAccount{}, attrs)
3334

3435
assert changeset.valid?
35-
assert changeset.changes.user_id == user.id
36+
assert changeset.changes.id == user.id
3637
end
3738

38-
test "sets id to match user_id" do
39+
test "sets id to match user id" do
3940
user = create_test_user()
4041

4142
attrs = %{
42-
user_id: user.id,
43-
description: "Test description"
43+
id: user.id,
44+
description: "Test description",
45+
creator_id: user.id
4446
}
4547

4648
changeset = ServiceAccount.changeset(%ServiceAccount{}, attrs)
@@ -49,22 +51,37 @@ defmodule Guard.FrontRepo.ServiceAccountTest do
4951
assert changeset.changes.id == user.id
5052
end
5153

52-
test "requires user_id field" do
54+
test "requires id field" do
5355
attrs = %{
5456
description: "Test description"
5557
}
5658

5759
changeset = ServiceAccount.changeset(%ServiceAccount{}, attrs)
5860

5961
refute changeset.valid?
60-
assert {"can't be blank", _} = changeset.errors[:user_id]
62+
assert {"can't be blank", _} = changeset.errors[:id]
63+
end
64+
65+
test "requires creator_id field" do
66+
user = create_test_user()
67+
68+
attrs = %{
69+
id: user.id,
70+
description: "Test description"
71+
}
72+
73+
changeset = ServiceAccount.changeset(%ServiceAccount{}, attrs)
74+
75+
refute changeset.valid?
76+
assert {"can't be blank", _} = changeset.errors[:creator_id]
6177
end
6278

6379
test "validates description length" do
6480
user = create_test_user()
6581

6682
attrs = %{
67-
user_id: user.id,
83+
id: user.id,
84+
creator_id: user.id,
6885
# Exceeds 500 character limit
6986
description: String.duplicate("a", 501)
7087
}
@@ -79,7 +96,8 @@ defmodule Guard.FrontRepo.ServiceAccountTest do
7996
user = create_test_user()
8097

8198
attrs = %{
82-
user_id: user.id,
99+
id: user.id,
100+
creator_id: user.id,
83101
# Exactly 500 characters
84102
description: String.duplicate("a", 500)
85103
}
@@ -93,7 +111,8 @@ defmodule Guard.FrontRepo.ServiceAccountTest do
93111
user = create_test_user()
94112

95113
attrs = %{
96-
user_id: user.id,
114+
id: user.id,
115+
creator_id: user.id,
97116
description: ""
98117
}
99118

@@ -106,7 +125,8 @@ defmodule Guard.FrontRepo.ServiceAccountTest do
106125
user = create_test_user()
107126

108127
attrs = %{
109-
user_id: user.id,
128+
id: user.id,
129+
creator_id: user.id,
110130
description: nil
111131
}
112132

@@ -115,11 +135,13 @@ defmodule Guard.FrontRepo.ServiceAccountTest do
115135
assert changeset.valid?
116136
end
117137

118-
test "enforces foreign key constraint on user_id" do
138+
test "enforces foreign key constraint on id" do
119139
non_existent_user_id = Ecto.UUID.generate()
140+
creator_user = create_test_user()
120141

121142
attrs = %{
122-
user_id: non_existent_user_id,
143+
id: non_existent_user_id,
144+
creator_id: creator_user.id,
123145
description: "Test description"
124146
}
125147

@@ -129,24 +151,27 @@ defmodule Guard.FrontRepo.ServiceAccountTest do
129151
assert changeset.valid?
130152

131153
{:error, changeset} = FrontRepo.insert(changeset)
132-
assert {"does not exist", _} = changeset.errors[:user_id]
154+
assert {"does not exist", _} = changeset.errors[:id]
133155
end
134156

135-
test "enforces unique constraint on user_id" do
157+
test "enforces unique constraint on id" do
136158
user = create_test_user()
159+
creator_user = create_test_user()
137160

138161
# Create first service account
139162
attrs1 = %{
140-
user_id: user.id,
163+
id: user.id,
164+
creator_id: creator_user.id,
141165
description: "First service account"
142166
}
143167

144168
changeset1 = ServiceAccount.changeset(%ServiceAccount{}, attrs1)
145169
{:ok, _} = FrontRepo.insert(changeset1)
146170

147-
# Try to create second service account with same user_id
171+
# Try to create second service account with same id
148172
attrs2 = %{
149-
user_id: user.id,
173+
id: user.id,
174+
creator_id: creator_user.id,
150175
description: "Second service account"
151176
}
152177

@@ -156,7 +181,7 @@ defmodule Guard.FrontRepo.ServiceAccountTest do
156181
assert changeset2.valid?
157182

158183
{:error, changeset} = FrontRepo.insert(changeset2)
159-
assert {"has already been taken", _} = changeset.errors[:user_id]
184+
assert {"has already been taken", _} = changeset.errors[:id]
160185
end
161186

162187
end
@@ -204,39 +229,39 @@ defmodule Guard.FrontRepo.ServiceAccountTest do
204229
assert changeset.valid?
205230
end
206231

207-
test "does not allow updating user_id" do
232+
test "does not allow updating id" do
208233
user = create_test_user()
209234
service_account = create_test_service_account(user)
210235
another_user = create_test_user()
211236

212237
attrs = %{
213-
user_id: another_user.id,
238+
id: another_user.id,
214239
description: "Updated description"
215240
}
216241

217242
changeset = ServiceAccount.update_changeset(service_account, attrs)
218243

219-
# user_id should not be in the changeset changes
244+
# id should not be in the changeset changes
220245
assert changeset.valid?
221-
refute Map.has_key?(changeset.changes, :user_id)
246+
refute Map.has_key?(changeset.changes, :id)
222247
assert changeset.changes.description == "Updated description"
223248
end
224249

225-
test "does not allow updating id" do
250+
test "does not allow updating creator_id" do
226251
user = create_test_user()
227252
service_account = create_test_service_account(user)
228-
new_id = Ecto.UUID.generate()
253+
new_creator_id = Ecto.UUID.generate()
229254

230255
attrs = %{
231-
id: new_id,
256+
creator_id: new_creator_id,
232257
description: "Updated description"
233258
}
234259

235260
changeset = ServiceAccount.update_changeset(service_account, attrs)
236261

237-
# id should not be in the changeset changes
262+
# creator_id should not be in the changeset changes
238263
assert changeset.valid?
239-
refute Map.has_key?(changeset.changes, :id)
264+
refute Map.has_key?(changeset.changes, :creator_id)
240265
assert changeset.changes.description == "Updated description"
241266
end
242267
end
@@ -271,7 +296,7 @@ defmodule Guard.FrontRepo.ServiceAccountTest do
271296
service_account = create_test_service_account(user)
272297

273298
assert is_binary(service_account.id)
274-
assert is_binary(service_account.user_id)
299+
assert is_binary(service_account.creator_id)
275300
assert is_binary(service_account.description) or is_nil(service_account.description)
276301
end
277302

@@ -280,7 +305,7 @@ defmodule Guard.FrontRepo.ServiceAccountTest do
280305

281306
attrs = %{
282307
id: user.id,
283-
user_id: user.id,
308+
creator_id: user.id,
284309
description: "Test description"
285310
}
286311

@@ -312,10 +337,13 @@ defmodule Guard.FrontRepo.ServiceAccountTest do
312337
end
313338

314339
defp create_test_service_account(user) do
340+
# Create a creator user to satisfy foreign key constraint
341+
creator_user = create_test_user()
342+
315343
attrs = %{
316-
user_id: user.id,
344+
id: user.id,
317345
description: "Test service account description",
318-
creator_id: Ecto.UUID.generate()
346+
creator_id: creator_user.id
319347
}
320348

321349
changeset = ServiceAccount.changeset(%ServiceAccount{}, attrs)

0 commit comments

Comments
 (0)