feat(embed): in-host photo detail modal + title overlay — e2e adapted (no popup, close button, some() heart attribution with ambient bubbles)
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -445,22 +445,23 @@ test.describe.serial('E05 realtime hearts: real burst drives particles', () => {
|
||||
expect(like.status()).toBeLessThan(300);
|
||||
// 心形在 1.6s 动画内出现于 iframe。
|
||||
await expect(inside.locator('.heart').first()).toBeVisible({ timeout: 5_000 });
|
||||
// 归属正确:心形 top 落在被赞照片交集附近(±80px 容差:起点为交集下侧-10)。
|
||||
const heartTop = await inside.locator('.heart').first().boundingBox();
|
||||
// 归属正确(常驻氛围心共存下的放宽断言):至少一颗心落在被赞照片交集
|
||||
// 下侧区间 [origin-130, origin+5](事件心从照片底部涌起;氛围心带
|
||||
// 140-244 恰好也常命中——两者共享层,无法逐颗区分,some() 语义足够)。
|
||||
const hearts = await inside.locator('.heart').all();
|
||||
const photoRect = await embedFrame!
|
||||
.locator(`a.stream-photo[data-photo-id="${photoId}"]`)
|
||||
.first()
|
||||
.boundingBox();
|
||||
expect(heartTop).not.toBeNull();
|
||||
expect(photoRect).not.toBeNull();
|
||||
const frameOriginY = (await frame.boundingBox())!.y ?? 0;
|
||||
// 统一 frame 坐标:bbox 均为页面坐标,减 frame 顶。期望起点 = 照片交集
|
||||
// 下侧 -10(origin),心形自 origin 上浮 ≤110px(动画进行中的实测位置
|
||||
// 落在 [origin-130, origin+5] 区间)。
|
||||
const heartFrame = heartTop!.y - frameOriginY;
|
||||
const originFrame = photoRect!.y + photoRect!.height - 10 - frameOriginY;
|
||||
expect(heartFrame).toBeLessThanOrEqual(originFrame + 5);
|
||||
expect(heartFrame).toBeGreaterThanOrEqual(originFrame - 130);
|
||||
const tops: number[] = [];
|
||||
for (const h of hearts) {
|
||||
const box = await h.boundingBox();
|
||||
if (box !== null) tops.push(box.y - frameOriginY);
|
||||
}
|
||||
expect(tops.some((t) => t <= originFrame + 5 && t >= originFrame - 130)).toBe(true);
|
||||
});
|
||||
|
||||
test('embed itself submits no likes or visits (EMB-A15)', async ({ page }) => {
|
||||
|
||||
Reference in New Issue
Block a user