Mercurial
diff mrjunejune/test/conversation_api_test.js @ 265:056790c4fb0d
add role-aware Epi assistant prompts
Add verified June knowledge, guest/member/admin Copilot profiles, profile-isolated session recovery, animated Epi greetings, and a single authoritative runtime config workflow for inference.
Co-authored-by: Copilot <[email protected]>
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Fri, 07 Aug 2026 10:50:30 -0700 |
| parents | 04fee26ecce0 |
| children |
line wrap: on
line diff
--- a/mrjunejune/test/conversation_api_test.js Fri Aug 07 07:34:12 2026 -0700 +++ b/mrjunejune/test/conversation_api_test.js Fri Aug 07 10:50:30 2026 -0700 @@ -167,7 +167,6 @@ MRJUNEJUNE_DB_PATH: databasePath, MRJUNEJUNE_INFERENCE_SIDECAR_PATH: fakeSidecar, MRJUNEJUNE_COPILOT_CLI_PATH: fakeSidecar, - MRJUNEJUNE_ALLOW_ANONYMOUS_INFERENCE: '1', MRJUNEJUNE_ALLOW_GUEST_INFERENCE: '1', }, stdio: ['ignore', 'pipe', 'pipe'], @@ -370,7 +369,10 @@ const stream = await response.text(); assert.match(stream, /event: turn\.accepted/); assert.match(stream, /event: tool\.started/); - assert.match(stream, /"tool":\{"name":"mock-search"\}/); + assert.match( + stream, + /"tool":\{"name":"mock-search","prompt_profile":"public_visitor"\}/, + ); assert.match(stream, /event: assistant\.delta/); assert.match(stream, /hello \\"traveler\\"\\\\path/); assert.match(stream, /event: assistant\.completed/); @@ -498,6 +500,108 @@ assert.equal(loginR.status, 200, `Login must succeed, got ${loginR.status}`); const userCsrfC2 = await bootstrapSession(claimBase, userJarC); + const assertTurnProfile = async (jar, csrf, expectedProfile, title) => { + const createResponse = await authedFetch( + claimBase, + jar, + csrf, + '/api/conversations', + { + method: 'POST', + headers: { 'Content-Type': 'application/json', Origin: claimBase }, + body: JSON.stringify({ title }), + }, + ); + assert.equal(createResponse.status, 201); + const createdConversation = await createResponse.json(); + const turnResponse = await authedFetch( + claimBase, + jar, + csrf, + `/api/conversations/${createdConversation.id}/turns`, + { + method: 'POST', + headers: { 'Content-Type': 'application/json', Origin: claimBase }, + body: JSON.stringify({ prompt: 'profile check' }), + }, + ); + assert.equal(turnResponse.status, 200); + assert.match( + await turnResponse.text(), + new RegExp(`"prompt_profile":"${expectedProfile}"`), + ); + }; + + await assertTurnProfile( + userJarC, + userCsrfC2, + 'june_admin', + 'Admin profile', + ); + + const createMemberR = await authedFetch( + claimBase, + userJarC, + userCsrfC2, + '/api/admin/users', + { + method: 'POST', + headers: { 'Content-Type': 'application/json', Origin: claimBase }, + body: JSON.stringify({ + username: 'invitedfriend', + temporaryPassword: 'InvitedTempPass123!', + role: 'member', + }), + }, + ); + assert.equal(createMemberR.status, 201); + + const memberJar = new CookieJar(); + const memberGuestCsrf = await bootstrapSession(claimBase, memberJar); + const memberLoginR = await authedFetch( + claimBase, + memberJar, + memberGuestCsrf, + '/api/auth/login', + { + method: 'POST', + headers: { 'Content-Type': 'application/json', Origin: claimBase }, + body: JSON.stringify({ + username: 'invitedfriend', + password: 'InvitedTempPass123!', + csrfToken: memberGuestCsrf, + }), + }, + ); + assert.equal(memberLoginR.status, 200); + const memberLoginData = await memberLoginR.json(); + assert.equal(memberLoginData.mustChangePassword, true); + + const memberPasswordCsrf = await bootstrapSession(claimBase, memberJar); + const memberPasswordR = await authedFetch( + claimBase, + memberJar, + memberPasswordCsrf, + '/api/auth/password', + { + method: 'POST', + headers: { 'Content-Type': 'application/json', Origin: claimBase }, + body: JSON.stringify({ + currentPassword: 'InvitedTempPass123!', + newPassword: 'InvitedPermanentPass123!', + csrfToken: memberPasswordCsrf, + }), + }, + ); + assert.equal(memberPasswordR.status, 200); + const memberCsrf = await bootstrapSession(claimBase, memberJar); + await assertTurnProfile( + memberJar, + memberCsrf, + 'invited_friend', + 'Invited profile', + ); + // A user cannot claim a conversation owned by a different guest. const claimR = await authedFetch(claimBase, userJarC, userCsrfC2, '/api/conversations/claim',