Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 8 additions & 33 deletions bun-tests/fake-snippets-api/routes/orgs/create.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@
const { axios } = await getTestServer()
const orgName = "acme-corp"
const createResponse = await axios.post("/api/orgs/create", {
name: orgName,
tscircuit_handle: orgName,
})

expect(createResponse.status).toBe(200)
const responseBody = createResponse.data
expect(responseBody.org).toBeDefined()
expect(responseBody.org.name).toBe(orgName)
expect(responseBody.org.github_handle).toBeNull()
expect(responseBody.org.tscircuit_handle).toBe(orgName)
expect(responseBody.org.owner_account_id).toBe(
Expand All @@ -26,7 +25,7 @@
const { axios, seed } = await getTestServer()
try {
await axios.post("/api/orgs/create", {
name: seed.organization.tscircuit_handle,
tscircuit_handle: seed.organization.tscircuit_handle,
})
throw new Error("Expected request to fail")
} catch (error: any) {
Expand All @@ -43,7 +42,7 @@
const name = "acme-corp-69"
const displayName = "ACME Corporation"
const createResponse = await axios.post("/api/orgs/create", {
name: name,
tscircuit_handle: name,
display_name: displayName,
})
expect(createResponse.status).toBe(200)
Expand All @@ -55,11 +54,11 @@
expect(responseBody.org.display_name).toBe(displayName)
})

test("POST /api/orgs/create - should map name as display_name when not provided", async () => {
test("POST /api/orgs/create - should map tscircuit_handle as display_name when not provided", async () => {
const { axios, db } = await getTestServer()
const name = "acme-corp"
const createResponse = await axios.post("/api/orgs/create", {
name: name,
tscircuit_handle: name,
})
expect(createResponse.status).toBe(200)
const responseBody = createResponse.data
Expand All @@ -83,36 +82,12 @@

for (const name of invalidNames) {
try {
await axios.post("/api/orgs/create", { name })
const response = await axios.post("/api/orgs/create", {
tscircuit_handle: name,
})
throw new Error(`Expected request to fail for name: ${name}`)
} catch (error: any) {
expect(error.status).toBe(400)

Check failure on line 90 in bun-tests/fake-snippets-api/routes/orgs/create.test.ts

View workflow job for this annotation

GitHub Actions / test

error: expect(received).toBe(expected)

Expected: 400 Received: undefined at <anonymous> (/home/runner/work/tscircuit.com/tscircuit.com/bun-tests/fake-snippets-api/routes/orgs/create.test.ts:90:28)

Check failure on line 90 in bun-tests/fake-snippets-api/routes/orgs/create.test.ts

View workflow job for this annotation

GitHub Actions / test

error: expect(received).toBe(expected)

Expected: 400 Received: undefined at <anonymous> (/home/runner/work/tscircuit.com/tscircuit.com/bun-tests/fake-snippets-api/routes/orgs/create.test.ts:90:28)

Check failure on line 90 in bun-tests/fake-snippets-api/routes/orgs/create.test.ts

View workflow job for this annotation

GitHub Actions / test

error: expect(received).toBe(expected)

Expected: 400 Received: undefined at <anonymous> (/home/runner/work/tscircuit.com/tscircuit.com/bun-tests/fake-snippets-api/routes/orgs/create.test.ts:90:28)

Check failure on line 90 in bun-tests/fake-snippets-api/routes/orgs/create.test.ts

View workflow job for this annotation

GitHub Actions / test

error: expect(received).toBe(expected)

Expected: 400 Received: undefined at <anonymous> (/home/runner/work/tscircuit.com/tscircuit.com/bun-tests/fake-snippets-api/routes/orgs/create.test.ts:90:28)
}
}
}, 10000)

test("POST /orgs/create accepts explicit tscircuit_handle", async () => {
const { jane_axios, db, seed } = await getTestServer()

const tscHandle = "Custom_Handle-1"
const orgName = "custom-handle-org"

const {
data: { org },
} = await jane_axios.post("/api/orgs/create", {
name: orgName,
tscircuit_handle: tscHandle,
})

expect(org.name).toBe(orgName)
expect(org.tscircuit_handle).toBe(tscHandle)
expect(org.github_handle).toBeNull()

const created = db.getOrg({
org_id: org.org_id,
})

expect(created?.tscircuit_handle).toBe(tscHandle)
expect(created?.github_handle).toBeNull()
expect(created?.owner_account_id).toBe(seed.account2.account_id)
})
6 changes: 3 additions & 3 deletions bun-tests/fake-snippets-api/routes/orgs/delete.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ test("POST /api/orgs/delete - should delete an organization", async () => {
const { jane_axios, seed } = await getTestServer()

const createResponse = await jane_axios.post("/api/orgs/create", {
name: "test-org-to-delete",
tscircuit_handle: "test-org-to-delete",
display_name: "Test Organization to Delete",
})
const org = createResponse.data.org
Expand All @@ -29,10 +29,10 @@ test("POST /api/orgs/delete - should delete an organization", async () => {
})

test("POST /api/orgs/delete - should fail for non-owner (403)", async () => {
const { jane_axios, axios, seed } = await getTestServer()
const { jane_axios, axios } = await getTestServer()

const createResponse = await jane_axios.post("/api/orgs/create", {
name: "test-org-protected",
tscircuit_handle: "test-org-protected",
display_name: "Test Organization Protected",
})
const org = createResponse.data.org
Expand Down
1 change: 0 additions & 1 deletion bun-tests/fake-snippets-api/routes/orgs/get.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ test("GET /api/orgs/get - should return org by org_id", async () => {
const responseBody2 = getNotOwnerResponse.data
expect(responseBody.org).toBeDefined()
expect(responseBody.org.org_id).toBe(seed.organization.org_id)
expect(responseBody.org.name).toBe(seed.organization.org_name)
expect(responseBody.org.github_handle).toBe(seed.organization.github_handle)
expect(responseBody.org.tscircuit_handle).toBe(
seed.organization.tscircuit_handle,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ test("GET /api/orgs/get_member - should return member by org_name and account_id

const getResponse = await jane_axios.get("/api/orgs/get_member", {
params: {
org_name: seed.organization.org_name,
org_id: seed.organization.org_id,
account_id: seed.account.account_id,
},
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ test("POST /api/orgs/remove_member - should remove a user from an org (resets to
const { jane_axios, seed } = await getTestServer()

const createResponse = await jane_axios.post("/api/orgs/create", {
name: "globex",
tscircuit_handle: "globex",
})
const org = createResponse.data.org

Expand All @@ -27,7 +27,7 @@ test("POST /api/orgs/remove_member - should fail for non-owner (403)", async ()
const { jane_axios, axios, seed } = await getTestServer()

const createResponse = await jane_axios.post("/api/orgs/create", {
name: "initech",
tscircuit_handle: "initech",
})
const org = createResponse.data.org

Expand Down
61 changes: 7 additions & 54 deletions bun-tests/fake-snippets-api/routes/orgs/update.test.ts
Original file line number Diff line number Diff line change
@@ -1,42 +1,21 @@
import { getTestServer } from "bun-tests/fake-snippets-api/fixtures/get-test-server"
import { expect, test } from "bun:test"

test("POST /api/orgs/update - should update org name when owner", async () => {
const { axios } = await getTestServer()

const createResponse = await axios.post("/api/orgs/create", {
name: "old-name",
})
const org = createResponse.data.org

const updateResponse = await axios.post("/api/orgs/update", {
org_id: org.org_id,
name: "new-name",
})

expect(updateResponse.status).toBe(200)
const responseBody = updateResponse.data
expect(responseBody.org).toBeDefined()
expect(responseBody.org.name).toBe("new-name")
expect(responseBody.org.github_handle).toBeNull()
expect(responseBody.org.user_permissions?.can_manage_org).toBe(true)
})

test("PATCH /api/orgs/update - should update org name using PATCH method", async () => {
const { axios } = await getTestServer()

const createResponse = await axios.post("/api/orgs/create", {
name: "patch-test",
tscircuit_handle: "patch-test",
})
const org = createResponse.data.org

const updateResponse = await axios.patch("/api/orgs/update", {
org_id: org.org_id,
name: "patch-updated",
display_name: "patch-updated",
})

expect(updateResponse.status).toBe(200)
expect(updateResponse.data.org.name).toBe("patch-updated")
expect(updateResponse.data.org.display_name).toBe("patch-updated")
expect(updateResponse.data.org.tscircuit_handle).toBe("patch-test")
expect(updateResponse.data.org.github_handle).toBeNull()
})
Expand All @@ -45,7 +24,6 @@ test("POST /api/orgs/update - should return current org when no changes provided
const { axios } = await getTestServer()

const createResponse = await axios.post("/api/orgs/create", {
name: "no-change",
tscircuit_handle: "no-change-handle",
})
const org = createResponse.data.org
Expand All @@ -55,7 +33,7 @@ test("POST /api/orgs/update - should return current org when no changes provided
})

expect(updateResponse.status).toBe(200)
expect(updateResponse.data.org.name).toBe("no-change")
expect(updateResponse.data.org.name).toBe("no-change-handle")
expect(updateResponse.data.org.tscircuit_handle).toBe("no-change-handle")
})

Expand All @@ -77,36 +55,11 @@ test("POST /api/orgs/update - should fail when user lacks management permissions
}
})

test("POST /api/orgs/update - should reject duplicate name", async () => {
const { axios } = await getTestServer()

await axios.post("/api/orgs/create", {
name: "dup-a",
})
const org2Response = await axios.post("/api/orgs/create", {
name: "dup-b",
})

try {
const updateResponse = await axios.post("/api/orgs/update", {
org_id: org2Response.data.org.org_id,
name: "dup-a",
})
throw new Error("Expected request to fail")
} catch (error: any) {
expect(error.status).toBe(400)
expect(error.data.error.error_code).toBe("org_already_exists")
expect(error.data.error.message).toBe(
"An organization with this name already exists",
)
}
})

test("POST /api/orgs/update - should update tscircuit_handle when owner", async () => {
const { axios, db } = await getTestServer()

const createResponse = await axios.post("/api/orgs/create", {
name: "handle-owner",
tscircuit_handle: "handle-owner",
})
const org = createResponse.data.org

Expand All @@ -129,7 +82,7 @@ test("POST /api/orgs/update - should reject duplicate tscircuit_handle", async (
const { axios } = await getTestServer()

const orgAResponse = await axios.post("/api/orgs/create", {
name: "dup-handle-a",
tscircuit_handle: "dup-handle-a",
})
const orgA = orgAResponse.data.org

Expand All @@ -139,7 +92,7 @@ test("POST /api/orgs/update - should reject duplicate tscircuit_handle", async (
})

const orgBResponse = await axios.post("/api/orgs/create", {
name: "dup-handle-b",
tscircuit_handle: "dup-handle-b",
})
const orgB = orgBResponse.data.org

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,12 +137,11 @@ test("create package release - package not found", async () => {
}
})

// test
test("create package release under org", async () => {
const { axios } = await getTestServer()

const orgResponse = await axios.post("/api/orgs/create", {
name: "testorg",
tscircuit_handle: "testorg",
})
expect(orgResponse.status).toBe(200)

Expand Down
15 changes: 7 additions & 8 deletions fake-snippets-api/lib/db/db-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1676,7 +1676,7 @@ const initializer = combine(databaseSchema.parse({}), (set, get) => ({
return updated
},
addOrganization: (organization: {
name: string
name?: string
org_id?: string
is_personal_org?: boolean
owner_account_id: string
Expand All @@ -1685,13 +1685,16 @@ const initializer = combine(databaseSchema.parse({}), (set, get) => ({
tscircuit_handle?: string
}) => {
const newOrganization: Organization = {
org_name: organization.name,
org_id: organization.org_id || `org_${get().idCounter + 1}`,
github_handle: organization.github_handle ?? null,
is_personal_org: organization.is_personal_org || false,
created_at: new Date().toISOString(),
org_display_name: organization.org_display_name ?? organization.name,
tscircuit_handle: organization.tscircuit_handle || organization.name,
org_display_name:
organization.org_display_name ??
organization.tscircuit_handle ??
undefined,
tscircuit_handle:
organization.tscircuit_handle || organization.name || null,
...organization,
}
set((state) => ({
Expand Down Expand Up @@ -1787,7 +1790,6 @@ const initializer = combine(databaseSchema.parse({}), (set, get) => ({
getOrg: (
filters: {
org_id?: string
org_name?: string
github_handle?: string
tscircuit_handle?: string
},
Expand All @@ -1798,9 +1800,6 @@ const initializer = combine(databaseSchema.parse({}), (set, get) => ({
if (filters?.org_id) {
orgs = orgs.filter((org) => org.org_id === filters.org_id)
}
if (filters?.org_name) {
orgs = orgs.filter((org) => org.org_name === filters.org_name)
}
// if (filters?.org_name && auth?.account_id) {
// const account = get().accounts.find(x => x.account_id == auth?.account_id)
// orgs = orgs.filter((org) => org.github_handle === account?.github_username)
Expand Down
3 changes: 1 addition & 2 deletions fake-snippets-api/lib/db/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,6 @@ export const orgSchema = z.object({
org_display_name: z.string().optional(),
github_handle: z.string().nullable(),
tscircuit_handle: z.string().nullable(),
org_name: z.string(),
})
export type Organization = z.infer<typeof orgSchema>

Expand Down Expand Up @@ -527,7 +526,7 @@ export type DatabaseSchema = z.infer<typeof databaseSchema>

export const tscircuitHandleSchema = z
.string()
.min(1)
.min(5)
.max(40)
.regex(
/^[0-9A-Za-z_-]+$/,
Expand Down
2 changes: 1 addition & 1 deletion fake-snippets-api/lib/db/seed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1880,7 +1880,7 @@ export const SquareWaveModule = () => (

const testOrg = db.addOrganization({
org_display_name: "Test Organization",
name: "test-organization",
tscircuit_handle: "test-organization",
github_handle: "tscircuit",
owner_account_id: account_id,
})
Expand Down
12 changes: 2 additions & 10 deletions fake-snippets-api/lib/middleware/with-session-auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,7 @@ export const withSessionAuth: Middleware<
)
return {
org_id: oa.org_id,
name:
org?.org_display_name ||
org?.org_name ||
org?.github_handle ||
oa.org_id,
name: org?.org_display_name || org?.github_handle || oa.org_id,
user_permissions: { can_manage_packages: true },
}
})
Expand Down Expand Up @@ -135,11 +131,7 @@ export const withSessionAuth: Middleware<
const org = state.organizations.find((o: any) => o.org_id === oa.org_id)
return {
org_id: oa.org_id,
name:
org?.org_display_name ||
org?.org_name ||
org?.github_handle ||
oa.org_id,
name: org?.org_display_name || org?.github_handle || oa.org_id,
user_permissions: { can_manage_packages: true },
}
})
Expand Down
5 changes: 2 additions & 3 deletions fake-snippets-api/lib/public-mapping/public-map-org.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,13 @@ export const publicMapOrg = (
is_personal_org,
org_display_name,
tscircuit_handle,
org_name,
...org
} = internal_org
return {
org_id: org.org_id,
display_name: org_display_name ?? org_name,
display_name: org_display_name ?? tscircuit_handle ?? undefined,
owner_account_id: org.owner_account_id,
name: org_name,
name: tscircuit_handle,
member_count: Number(member_count) || 0,
package_count: Number(package_count) || 0,
is_personal_org: Boolean(is_personal_org),
Expand Down
Loading
Loading