feat(release): prepare 1.1.0 candidate
This commit is contained in:
parent
5a34f66981
commit
5205dcdfa9
736 changed files with 115667 additions and 12203 deletions
71
apps/mobile-rn/__tests__/entitlement.test.ts
Normal file
71
apps/mobile-rn/__tests__/entitlement.test.ts
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
import { normalizeEntitlement } from '../src/lib/entitlement-context'
|
||||
|
||||
describe('normalizeEntitlement', () => {
|
||||
const now = new Date('2026-08-21T00:00:00Z')
|
||||
|
||||
it('free 계정은 광고 제거 권한을 만들지 않는다', () => {
|
||||
const snapshot = normalizeEntitlement({
|
||||
tier: 'free',
|
||||
status: 'active',
|
||||
provider: 'none',
|
||||
payment_provider: 'none',
|
||||
overage_credits: 50,
|
||||
}, [{ feature: 'stt_transcribe', count: 3 }], [], now)
|
||||
|
||||
expect(snapshot.tier).toBe('free')
|
||||
expect(snapshot.adFree).toBe(false)
|
||||
expect(snapshot.overageCredits).toBe(50)
|
||||
expect(snapshot.usageToday.stt_transcribe).toBe(3)
|
||||
})
|
||||
|
||||
it('서버가 확인한 유효 paid period만 광고 제거 권한을 준다', () => {
|
||||
const active = normalizeEntitlement({
|
||||
tier: 'pro',
|
||||
status: 'active',
|
||||
provider: 'google_play',
|
||||
payment_provider: 'google_play',
|
||||
current_period_end: '2026-09-21T00:00:00Z',
|
||||
}, [], [], now)
|
||||
const expired = normalizeEntitlement({
|
||||
tier: 'pro',
|
||||
status: 'active',
|
||||
provider: 'google_play',
|
||||
payment_provider: 'google_play',
|
||||
current_period_end: '2026-08-20T00:00:00Z',
|
||||
}, [], [], now)
|
||||
|
||||
expect(active.adFree).toBe(true)
|
||||
expect(expired.adFree).toBe(false)
|
||||
})
|
||||
|
||||
it('취소된 선불 기간과 안전한 구매 요약을 보존한다', () => {
|
||||
const snapshot = normalizeEntitlement({
|
||||
tier: 'pro_plus',
|
||||
status: 'canceled',
|
||||
provider: 'google_play',
|
||||
payment_provider: 'google_play',
|
||||
current_period_end: '2026-09-21T00:00:00Z',
|
||||
auto_renewing: false,
|
||||
}, [], [{
|
||||
id: 'purchase-1',
|
||||
platform: 'google_play',
|
||||
product_id: 'd3ro_voice_pro_plus_monthly',
|
||||
purchase_state: 'cancelled',
|
||||
purchase_at: '2026-08-21T00:00:00Z',
|
||||
expires_at: '2026-09-21T00:00:00Z',
|
||||
auto_renewing: false,
|
||||
verified_at: '2026-08-21T00:01:00Z',
|
||||
}, {
|
||||
id: 'invalid-receipt',
|
||||
platform: 'unknown',
|
||||
product_id: 'unknown',
|
||||
purchase_state: 'purchased',
|
||||
verified_at: 'invalid',
|
||||
}], now)
|
||||
|
||||
expect(snapshot.adFree).toBe(true)
|
||||
expect(snapshot.autoRenewing).toBe(false)
|
||||
expect(snapshot.purchases).toHaveLength(1)
|
||||
expect(snapshot.purchases[0].productId).toBe('d3ro_voice_pro_plus_monthly')
|
||||
})
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue