store-scope.spec.ts 3.0 KB

1234567891011121314151617181920212223242526272829
  1. import {TestBed} from '@angular/core/testing';
  2. import {Router,UrlTree,provideRouter} from '@angular/router';
  3. import {signal} from '@angular/core';
  4. import {AdminSessionService} from './admin-session.service';
  5. import {adminGuard} from './admin.guard';
  6. import {MemberCreditAccountComponent} from './components/member-credit-account.component';
  7. import {StoreCreditAccountComponent} from './components/store-credit-account.component';
  8. import {OperationsService} from './operations.service';
  9. import {STORE_NAVIGATION} from './admin.constants';
  10. describe('门店后台入口与权限',()=>{
  11. const session=signal({operationsRole:'store-admin',storeId:10,storeObjectId:'store-a',passwordResetRequired:false});
  12. beforeEach(()=>TestBed.configureTestingModule({providers:[provideRouter([]),{provide:AdminSessionService,useValue:{session,isAuthenticated:()=>true}},{provide:OperationsService,useValue:{request:()=>Promise.resolve({accounts:[],transactions:[],canPost:false,items:[],total:0})}}]}));
  13. it('门店首页重定向且阻止直接访问总部路由',()=>{
  14. for(const path of ['/admin/dashboard','/admin/vocabulary','/admin/privacy-requests','/admin/operator-accounts','/tech-admin/dashboard']){
  15. const result=TestBed.runInInjectionContext(()=>adminGuard({} as never,{url:path} as never)) as UrlTree;
  16. expect(TestBed.inject(Router).serializeUrl(result)).toBe(path==='/admin/dashboard'?'/admin/store-home':'/admin/forbidden');
  17. }
  18. for(const path of ['/admin/members','/admin/members/a','/admin/schedule','/admin/stores','/admin/stores/a','/admin/coaches','/admin/coaches/a','/admin/payroll','/admin/lessons','/admin/learning-reports','/admin/support-requests','/admin/store-home','/admin/change-password'])expect(TestBed.runInInjectionContext(()=>adminGuard({} as never,{url:path} as never))).toBeTrue();
  19. });
  20. it('展示全部八项门店业务模块和个人密码菜单',()=>{expect(STORE_NAVIGATION.flatMap(g=>g.items).map(i=>i.route)).toEqual(['/admin/store-home','/admin/members','/admin/stores','/admin/schedule','/admin/coaches','/admin/payroll','/admin/lessons','/admin/learning-reports','/admin/support-requests','/admin/change-password']);});
  21. it('学生充值不提供历史差错增额或旧系统导入入口',async()=>{
  22. const f=TestBed.createComponent(MemberCreditAccountComponent);f.componentInstance.data.set({storeId:10,storeName:'本店',trialStatus:'pending',canPost:true,accounts:[],transactions:[]} as never);f.detectChanges();
  23. expect(f.nativeElement.querySelector('select[name="direction"] option[value="adjust"]')).toBeNull();expect(f.nativeElement.textContent).not.toContain('核验旧体验');f.destroy();
  24. });
  25. it('本店额度说明由总部充值,不出现充值授权建议',()=>{
  26. const f=TestBed.createComponent(StoreCreditAccountComponent);f.componentInstance.data.set({storeId:10,storeName:'本店',canPost:false,accounts:[],transactions:[]} as never);f.detectChanges();expect(f.nativeElement.textContent).toContain('本店额度由总部充值');expect(f.nativeElement.textContent).not.toContain('单独授权');f.destroy();
  27. });
  28. });