1
- import readmeStats , { UiConfig } from '../api/index' ;
2
- import escapeHTML from 'escape-html' ;
3
- import svg2img from '@fajarkim/svg2img' ;
4
- import getData from '../src/getData' ;
5
- import cardStyle from '../src/card' ;
6
- import { themes , Themes } from '../themes/index' ;
7
- import { isValidHexColor , isValidGradient , parseBoolean } from '../src/common/utils' ;
8
-
9
- jest . mock ( '@fajarkim/svg2img' ) ;
10
- jest . mock ( '../src/getData' ) ;
11
- jest . mock ( '../src/card' ) ;
12
- jest . mock ( 'express' ) ;
13
-
14
- describe ( 'Test GitHub Readme Profile API' , ( ) => {
1
+ import readmeStats from "../api/index" ;
2
+ import escapeHTML from "escape-html" ;
3
+ import svg2img from "@fajarkim/svg2img" ;
4
+ import getData from "../src/getData" ;
5
+ import cardStyle from "../src/card" ;
6
+ import { themes } from "../themes/index" ;
7
+ import { locales } from "../src/translations" ;
8
+
9
+ jest . mock ( "@fajarkim/svg2img" ) ;
10
+ jest . mock ( "../src/getData" ) ;
11
+ jest . mock ( "../src/card" ) ;
12
+ jest . mock ( "express" ) ;
13
+
14
+ function valueReturn ( value : string ) : string {
15
+ return `${ value } ` ;
16
+ }
17
+
18
+ describe ( "Test GitHub Readme Profile API" , ( ) => {
15
19
let mockRequest : any ;
16
20
let mockResponse : any ;
17
21
@@ -31,15 +35,102 @@ describe('Test GitHub Readme Profile API', () => {
31
35
jest . clearAllMocks ( ) ;
32
36
} ) ;
33
37
34
- it ( ' should handle request and generate JSON response' , async ( ) => {
35
- mockRequest . query . username = ' FajarKim' ;
36
- mockRequest . query . format = ' json' ;
38
+ it ( " should handle request and generate JSON response" , async ( ) => {
39
+ mockRequest . query . username = " FajarKim" ;
40
+ mockRequest . query . format = " json" ;
37
41
38
42
await readmeStats ( mockRequest , mockResponse ) ;
39
43
40
- expect ( getData ) . toHaveBeenCalledWith ( mockRequest . query . username ) ;
41
- expect ( mockResponse . json ) . toHaveBeenCalledWith ( getData ( mockRequest . query . username ) ) ;
44
+ expect ( await getData ) . toHaveBeenCalledWith ( mockRequest . query . username ) ;
45
+ expect ( mockResponse . json ) . toHaveBeenCalledWith ( await getData ( mockRequest . query . username ) ) ;
42
46
expect ( mockResponse . send ) . not . toHaveBeenCalled ( ) ;
43
- expect ( mockResponse . setHeader ) . toHaveBeenCalledWith ( 'Cache-Control' , 's-maxage=3600, stale-while-revalidate' ) ;
47
+ expect ( mockResponse . setHeader ) . toHaveBeenCalledWith ( "Cache-Control" , "s-maxage=3600, stale-while-revalidate" ) ;
48
+ } ) ;
49
+
50
+ it ( "should handle request and generate SVG response" , async ( ) => {
51
+ mockRequest . query . username = "FajarKim" ;
52
+ mockRequest . query . format = "svg" ;
53
+
54
+ await readmeStats ( mockRequest , mockResponse ) ;
55
+
56
+ expect ( await getData ) . toHaveBeenCalledWith ( mockRequest . query . username ) ;
57
+ expect ( cardStyle ) . toHaveBeenCalledWith ( await getData ( mockRequest . query . username ) , expect . any ( Object ) ) ;
58
+ expect ( mockResponse . send ) . toHaveBeenCalled ( ) ;
59
+ expect ( mockResponse . json ) . not . toHaveBeenCalled ( ) ;
60
+ expect ( mockResponse . setHeader ) . toHaveBeenCalledWith ( "Content-Type" , "image/svg+xml" ) ;
61
+ } ) ;
62
+
63
+ it ( "should handle request theme and generate SVG response" , async ( ) => {
64
+ const availableThemes = Object . keys ( themes ) ;
65
+ for ( let i = 0 ; i < availableThemes . length ; i += 1 ) {
66
+ const themesSlice = availableThemes . slice ( i , i + 1 ) ;
67
+ const row = themesSlice . map ( theme => valueReturn ( theme ) ) . join ( "" ) ;
68
+
69
+ mockRequest . query . username = "FajarKim" ;
70
+ mockRequest . query . theme = row ;
71
+
72
+ await readmeStats ( mockRequest , mockResponse ) ;
73
+
74
+ expect ( await getData ) . toHaveBeenCalledWith ( mockRequest . query . username ) ;
75
+ expect ( cardStyle ) . toHaveBeenCalledWith ( await getData ( mockRequest . query . username ) , expect . any ( Object ) ) ;
76
+ expect ( mockResponse . send ) . toHaveBeenCalled ( ) ;
77
+ expect ( mockResponse . json ) . not . toHaveBeenCalled ( ) ;
78
+ expect ( mockResponse . setHeader ) . toHaveBeenCalledWith ( "Content-Type" , "image/svg+xml" ) ;
79
+ }
80
+ } ) ;
81
+
82
+ it ( "should handle request locale and generate SVG response" , async ( ) => {
83
+ const availableLocales = Object . keys ( locales ) ;
84
+ for ( let i = 0 ; i < availableLocales . length ; i += 1 ) {
85
+ const localesSlice = availableLocales . slice ( i , i + 1 ) ;
86
+ const row = localesSlice . map ( locale => valueReturn ( locale ) ) . join ( "" ) ;
87
+
88
+ mockRequest . query . username = "FajarKim" ;
89
+ mockRequest . query . locale = row ;
90
+
91
+ await readmeStats ( mockRequest , mockResponse ) ;
92
+
93
+ expect ( await getData ) . toHaveBeenCalledWith ( mockRequest . query . username ) ;
94
+ expect ( cardStyle ) . toHaveBeenCalledWith ( await getData ( mockRequest . query . username ) , expect . any ( Object ) ) ;
95
+ expect ( mockResponse . send ) . toHaveBeenCalled ( ) ;
96
+ expect ( mockResponse . json ) . not . toHaveBeenCalled ( ) ;
97
+ expect ( mockResponse . setHeader ) . toHaveBeenCalledWith ( "Content-Type" , "image/svg+xml" ) ;
98
+ }
99
+ } ) ;
100
+
101
+ it ( "should handle request hide stats and generate SVG response" , async ( ) => {
102
+ mockRequest . query . username = "FajarKim" ;
103
+ mockRequest . query . hide = "repos,forks,prs_merged" ;
104
+
105
+ await readmeStats ( mockRequest , mockResponse ) ;
106
+
107
+ expect ( await getData ) . toHaveBeenCalledWith ( mockRequest . query . username ) ;
108
+ expect ( cardStyle ) . toHaveBeenCalledWith ( await getData ( mockRequest . query . username ) , expect . any ( Object ) ) ;
109
+ expect ( mockResponse . send ) . toHaveBeenCalled ( ) ;
110
+ expect ( mockResponse . json ) . not . toHaveBeenCalled ( ) ;
111
+ expect ( mockResponse . setHeader ) . toHaveBeenCalledWith ( "Content-Type" , "image/svg+xml" ) ;
112
+ } ) ;
113
+
114
+ it ( "should handle request show stats and generate SVG response" , async ( ) => {
115
+ mockRequest . query . username = "FajarKim" ;
116
+ mockRequest . query . show = "reviews,issues_closed" ;
117
+
118
+ await readmeStats ( mockRequest , mockResponse ) ;
119
+
120
+ expect ( await getData ) . toHaveBeenCalledWith ( mockRequest . query . username ) ;
121
+ expect ( cardStyle ) . toHaveBeenCalledWith ( await getData ( mockRequest . query . username ) , expect . any ( Object ) ) ;
122
+ expect ( mockResponse . send ) . toHaveBeenCalled ( ) ;
123
+ expect ( mockResponse . json ) . not . toHaveBeenCalled ( ) ;
124
+ expect ( mockResponse . setHeader ) . toHaveBeenCalledWith ( "Content-Type" , "image/svg+xml" ) ;
125
+ } ) ;
126
+
127
+ it ( "should handle invalid username and send error response" , async ( ) => {
128
+ await readmeStats ( mockRequest , mockResponse ) ;
129
+
130
+ expect ( await getData ) . not . toHaveBeenCalledWith ( ) ;
131
+ expect ( cardStyle ) . not . toHaveBeenCalledWith ( ) ;
132
+ expect ( mockResponse . send ) . toHaveBeenCalled ( ) ;
133
+ expect ( mockResponse . json ) . not . toHaveBeenCalled ( ) ;
134
+ expect ( mockResponse . setHeader ) . toHaveBeenCalledWith ( "Cache-Control" , "s-maxage=3600, stale-while-revalidate" ) ;
44
135
} ) ;
45
136
} ) ;
0 commit comments