1
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
|
||||
import type { RuntimeRepositoryPort } from '../runtimeRepository.js';
|
||||
import { RpgBrowseHistoryRepository } from './RpgBrowseHistoryRepository.js';
|
||||
import { RpgProfileDashboardRepository } from './RpgProfileDashboardRepository.js';
|
||||
|
||||
function createRuntimeRepositoryStub(): RuntimeRepositoryPort {
|
||||
return {
|
||||
async getSnapshot() {
|
||||
return null;
|
||||
},
|
||||
async putSnapshot(_userId, payload) {
|
||||
return {
|
||||
version: 1,
|
||||
...payload,
|
||||
};
|
||||
},
|
||||
async getProfileDashboard() {
|
||||
return {
|
||||
walletBalance: 0,
|
||||
totalPlayTimeMs: 0,
|
||||
playedWorldCount: 0,
|
||||
updatedAt: '2026-04-21T00:00:00.000Z',
|
||||
};
|
||||
},
|
||||
async listProfileWalletLedger() {
|
||||
return [];
|
||||
},
|
||||
async getProfilePlayStats() {
|
||||
return {
|
||||
totalPlayTimeMs: 0,
|
||||
playedWorks: [],
|
||||
updatedAt: '2026-04-21T00:00:00.000Z',
|
||||
};
|
||||
},
|
||||
async listProfileSaveArchives() {
|
||||
return [];
|
||||
},
|
||||
async resumeProfileSaveArchive() {
|
||||
return null;
|
||||
},
|
||||
async deleteSnapshot() {},
|
||||
async getSettings() {
|
||||
return {
|
||||
musicVolume: 0.5,
|
||||
platformTheme: 'light',
|
||||
};
|
||||
},
|
||||
async putSettings(_userId, settings) {
|
||||
return settings;
|
||||
},
|
||||
async listCustomWorldProfiles() {
|
||||
return [];
|
||||
},
|
||||
async listPlatformBrowseHistory() {
|
||||
return [
|
||||
{
|
||||
ownerUserId: 'owner-1',
|
||||
profileId: 'profile-1',
|
||||
worldName: '雾港',
|
||||
subtitle: '沿海试炼',
|
||||
summaryText: '最近访问',
|
||||
coverImageSrc: null,
|
||||
themeMode: 'mythic',
|
||||
authorDisplayName: '测试者',
|
||||
visitedAt: '2026-04-21T00:00:00.000Z',
|
||||
},
|
||||
];
|
||||
},
|
||||
async upsertPlatformBrowseHistoryEntries(_userId, entries) {
|
||||
return entries.map((entry) => ({
|
||||
ownerUserId: entry.ownerUserId,
|
||||
profileId: entry.profileId,
|
||||
worldName: entry.worldName,
|
||||
subtitle: entry.subtitle ?? '',
|
||||
summaryText: entry.summaryText ?? '',
|
||||
coverImageSrc: entry.coverImageSrc ?? null,
|
||||
themeMode: entry.themeMode ?? 'mythic',
|
||||
authorDisplayName: entry.authorDisplayName ?? '玩家',
|
||||
visitedAt: entry.visitedAt ?? '2026-04-21T00:00:00.000Z',
|
||||
}));
|
||||
},
|
||||
async clearPlatformBrowseHistory() {},
|
||||
async upsertCustomWorldProfile() {
|
||||
return {
|
||||
entry: {} as never,
|
||||
entries: [],
|
||||
};
|
||||
},
|
||||
async deleteCustomWorldProfile() {
|
||||
return [];
|
||||
},
|
||||
async listCustomWorldSessions() {
|
||||
return [];
|
||||
},
|
||||
async getCustomWorldSession() {
|
||||
return null;
|
||||
},
|
||||
async upsertCustomWorldSession(_userId, _sessionId, session) {
|
||||
return session;
|
||||
},
|
||||
async publishCustomWorldProfile() {
|
||||
return null;
|
||||
},
|
||||
async unpublishCustomWorldProfile() {
|
||||
return null;
|
||||
},
|
||||
async listPublishedCustomWorldGallery() {
|
||||
return [];
|
||||
},
|
||||
async getPublishedCustomWorldGalleryDetail() {
|
||||
return null;
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
test('RpgProfileDashboardRepository 只暴露资料看板域方法', async () => {
|
||||
const repository = new RpgProfileDashboardRepository(
|
||||
createRuntimeRepositoryStub(),
|
||||
);
|
||||
|
||||
const dashboard = await repository.getProfileDashboard('user-1');
|
||||
const playStats = await repository.getProfilePlayStats('user-1');
|
||||
const settings = await repository.getSettings('user-1');
|
||||
|
||||
assert.equal(dashboard.playedWorldCount, 0);
|
||||
assert.equal(playStats.playedWorks.length, 0);
|
||||
assert.equal(settings.platformTheme, 'light');
|
||||
assert.equal('listPlatformBrowseHistory' in repository, false);
|
||||
});
|
||||
|
||||
test('RpgBrowseHistoryRepository 独立承接浏览历史读写,不再混入资料看板仓储', async () => {
|
||||
const repository = new RpgBrowseHistoryRepository(createRuntimeRepositoryStub());
|
||||
|
||||
const history = await repository.listPlatformBrowseHistory('user-1');
|
||||
const updated = await repository.upsertPlatformBrowseHistoryEntries('user-1', [
|
||||
{
|
||||
ownerUserId: 'owner-2',
|
||||
profileId: 'profile-2',
|
||||
worldName: '盐雾镇',
|
||||
subtitle: '盐路补给点',
|
||||
summaryText: '测试写入浏览历史',
|
||||
coverImageSrc: null,
|
||||
themeMode: 'mythic',
|
||||
authorDisplayName: '测试者二号',
|
||||
visitedAt: '2026-04-21T01:00:00.000Z',
|
||||
},
|
||||
]);
|
||||
|
||||
assert.equal(history[0]?.worldName, '雾港');
|
||||
assert.equal(updated[0]?.profileId, 'profile-2');
|
||||
assert.equal('getProfileDashboard' in repository, false);
|
||||
});
|
||||
Reference in New Issue
Block a user