File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -37,7 +37,7 @@ import {
3737
3838/* ── types ────────────────────────────────────────────────────────────── */
3939
40- interface UserProfile {
40+ export interface UserProfile {
4141 username : string ;
4242 name : string ;
4343 avatarUrl : string ;
@@ -54,7 +54,7 @@ interface UserProfile {
5454 } ;
5555}
5656
57- interface UserStats {
57+ export interface UserStats {
5858 currentStreak : number ;
5959 peakStreak : number ;
6060 totalContributions : number ;
@@ -63,28 +63,28 @@ interface UserStats {
6363 totalIssues ?: number ;
6464}
6565
66- interface LanguageData {
66+ export interface LanguageData {
6767 name : string ;
6868 color : string ;
6969 percentage : number ;
7070}
7171
72- interface ActivityData {
72+ export interface ActivityData {
7373 date : string ;
7474 count : number ;
7575 intensity : 0 | 1 | 2 | 3 | 4 ;
7676 locAdditions ?: number ;
7777 locDeletions ?: number ;
7878}
7979
80- interface CompareUserData {
80+ export interface CompareUserData {
8181 profile : UserProfile ;
8282 stats : UserStats ;
8383 languages : LanguageData [ ] ;
8484 activity : ActivityData [ ] ;
8585}
8686
87- interface CompareResponse {
87+ export interface CompareResponse {
8888 user1 : CompareUserData ;
8989 user2 : CompareUserData ;
9090 error ?: string ;
Original file line number Diff line number Diff line change 1+ import { describe , expectTypeOf , it } from 'vitest' ;
2+
3+ import type {
4+ ActivityData ,
5+ CompareResponse ,
6+ CompareUserData ,
7+ LanguageData ,
8+ UserProfile ,
9+ UserStats ,
10+ } from './CompareClient' ;
11+
12+ describe ( 'CompareClient Type Compiler Validation' , ( ) => {
13+ it ( 'validates UserProfile structure' , ( ) => {
14+ expectTypeOf < UserProfile > ( ) . toEqualTypeOf < {
15+ username : string ;
16+ name : string ;
17+ avatarUrl : string ;
18+ isPro : boolean ;
19+ bio : string ;
20+ location : string ;
21+ joinedDate : string ;
22+ developerScore : number ;
23+ stats : {
24+ repositories : number ;
25+ followers : number ;
26+ following : number ;
27+ stars : number ;
28+ } ;
29+ } > ( ) ;
30+ } ) ;
31+
32+ it ( 'validates UserStats numeric and optional fields' , ( ) => {
33+ expectTypeOf < UserStats > ( ) . toEqualTypeOf < {
34+ currentStreak : number ;
35+ peakStreak : number ;
36+ totalContributions : number ;
37+ codingHabit ?: string ;
38+ totalPRs ?: number ;
39+ totalIssues ?: number ;
40+ } > ( ) ;
41+ } ) ;
42+
43+ it ( 'validates LanguageData structure' , ( ) => {
44+ expectTypeOf < LanguageData > ( ) . toEqualTypeOf < {
45+ name : string ;
46+ color : string ;
47+ percentage : number ;
48+ } > ( ) ;
49+ } ) ;
50+
51+ it ( 'accepts optional fields in ActivityData without compile errors' , ( ) => {
52+ expectTypeOf < ActivityData > ( ) . toEqualTypeOf < {
53+ date : string ;
54+ count : number ;
55+ intensity : 0 | 1 | 2 | 3 | 4 ;
56+ locAdditions ?: number ;
57+ locDeletions ?: number ;
58+ } > ( ) ;
59+ } ) ;
60+
61+ it ( 'validates CompareResponse structure' , ( ) => {
62+ expectTypeOf < CompareResponse > ( ) . toEqualTypeOf < {
63+ user1 : CompareUserData ;
64+ user2 : CompareUserData ;
65+ error ?: string ;
66+ } > ( ) ;
67+ } ) ;
68+ } ) ;
You can’t perform that action at this time.
0 commit comments