1
1
import { ok , strictEqual as eq , rejects } from 'node:assert' ;
2
+ import crypto from 'node:crypto' ;
2
3
import zunit from 'zunit' ;
3
4
import { Octokit } from '@octokit/rest' ;
4
5
import GitHubDriver from '../index.js' ;
@@ -21,44 +22,73 @@ describe('driver', () => {
21
22
it ( 'should create issues with labels' , async ( t ) => {
22
23
const repository = { owner : 'acuminous' , name : 'knuff-github-driver' } ;
23
24
const reminder = {
24
- id : ' test' ,
25
+ id : ` test- ${ crypto . randomBytes ( 10 ) . toString ( 'hex' ) } ` ,
25
26
title : t . name ,
26
27
body : 'the body' ,
27
28
labels : [ 'l1' , 'l2' ] ,
28
- date : new Date ( '2024-12-25' ) ,
29
+ date : new Date ( '2024-12-25T13:00:00Z' ) ,
30
+ timezone : 'Europe/London' ,
29
31
} ;
30
32
const { data : issue } = await driver . createReminder ( repository , reminder ) ;
31
33
32
34
ok ( issue . number ) ;
33
35
eq ( issue . title , 'should create issues with labels' ) ;
34
36
eq ( issue . labels . length , 4 ) ;
35
- eq ( issue . labels [ 0 ] . name , 'knuff:2024-12-25' ) ;
36
- eq ( issue . labels [ 1 ] . name , 'knuff:test' ) ;
37
- eq ( issue . labels [ 2 ] . name , 'l1' ) ;
38
- eq ( issue . labels [ 3 ] . name , 'l2' ) ;
37
+
38
+ const labels = issue . labels . map ( ( l ) => l . name ) . sort ( ) ;
39
+ eq ( labels [ 0 ] , 'knuff:2024-12-25' ) ;
40
+ eq ( labels [ 1 ] , `knuff:${ reminder . id } ` ) ;
41
+ eq ( labels [ 2 ] , 'l1' ) ;
42
+ eq ( labels [ 3 ] , 'l2' ) ;
39
43
} ) ;
40
44
41
45
it ( 'should create issues without labels' , async ( t ) => {
42
46
const repository = { owner : 'acuminous' , name : 'knuff-github-driver' } ;
43
47
const reminder = {
44
- id : ' test' ,
48
+ id : ` test- ${ crypto . randomBytes ( 10 ) . toString ( 'hex' ) } ` ,
45
49
title : t . name ,
46
50
body : 'the body' ,
47
51
date : new Date ( '2024-12-25' ) ,
52
+ timezone : 'Europe/London' ,
48
53
} ;
49
54
const { data : issue } = await driver . createReminder ( repository , reminder ) ;
50
55
51
56
ok ( issue . number ) ;
52
57
eq ( issue . title , 'should create issues without labels' ) ;
53
58
eq ( issue . labels . length , 2 ) ;
54
- eq ( issue . labels [ 0 ] . name , 'knuff:2024-12-25' ) ;
55
- eq ( issue . labels [ 1 ] . name , 'knuff:test' ) ;
59
+
60
+ const labels = issue . labels . map ( ( l ) => l . name ) . sort ( ) ;
61
+ eq ( labels [ 0 ] , 'knuff:2024-12-25' ) ;
62
+ eq ( labels [ 1 ] , `knuff:${ reminder . id } ` ) ;
63
+ } ) ;
64
+
65
+ it ( 'should honour timezones' , async ( t ) => {
66
+ const repository = { owner : 'acuminous' , name : 'knuff-github-driver' } ;
67
+ const reminder = {
68
+ id : `test-${ crypto . randomBytes ( 10 ) . toString ( 'hex' ) } ` ,
69
+ title : t . name ,
70
+ body : 'the body' ,
71
+ labels : [ 'l1' , 'l2' ] ,
72
+ date : new Date ( '2024-12-25T13:00:00Z' ) ,
73
+ timezone : 'Australia/Sydney' ,
74
+ } ;
75
+ const { data : issue } = await driver . createReminder ( repository , reminder ) ;
76
+
77
+ ok ( issue . number ) ;
78
+ eq ( issue . title , 'should honour timezones' ) ;
79
+ eq ( issue . labels . length , 4 ) ;
80
+
81
+ const labels = issue . labels . map ( ( l ) => l . name ) . sort ( ) ;
82
+ eq ( labels [ 0 ] , 'knuff:2024-12-26' ) ;
83
+ eq ( labels [ 1 ] , `knuff:${ reminder . id } ` ) ;
84
+ eq ( labels [ 2 ] , 'l1' ) ;
85
+ eq ( labels [ 3 ] , 'l2' ) ;
56
86
} ) ;
57
87
58
88
it ( 'should reject reminders with labels greater than 51 characters' , async ( t ) => {
59
89
const repository = { owner : 'acuminous' , name : 'knuff-github-driver' } ;
60
90
const reminder = {
61
- id : ' test' ,
91
+ id : ` test- ${ crypto . randomBytes ( 10 ) . toString ( 'hex' ) } ` ,
62
92
title : t . name ,
63
93
body : 'the body' ,
64
94
labels : [ '123456789 123456789 123456789 123456789 123456789 12' ] ,
@@ -89,7 +119,7 @@ describe('driver', () => {
89
119
it ( 'should find open issues with the same id and date' , async ( t ) => {
90
120
const repository = { owner : 'acuminous' , name : 'knuff-github-driver' } ;
91
121
const reminder = {
92
- id : ' test' ,
122
+ id : ` test- ${ crypto . randomBytes ( 10 ) . toString ( 'hex' ) } ` ,
93
123
title : t . name ,
94
124
body : 'the body' ,
95
125
labels : [ 'l1' , 'l2' ] ,
@@ -99,14 +129,13 @@ describe('driver', () => {
99
129
await driver . createReminder ( repository , reminder ) ;
100
130
101
131
const found = await driver . hasReminder ( repository , reminder ) ;
102
-
103
132
eq ( found , true ) ;
104
133
} ) ;
105
134
106
135
it ( 'should find closed issues with the same id and date' , async ( t ) => {
107
136
const repository = { owner : 'acuminous' , name : 'knuff-github-driver' } ;
108
137
const reminder = {
109
- id : ' test' ,
138
+ id : ` test- ${ crypto . randomBytes ( 10 ) . toString ( 'hex' ) } ` ,
110
139
title : t . name ,
111
140
body : 'the body' ,
112
141
labels : [ 'l1' , 'l2' ] ,
@@ -123,11 +152,12 @@ describe('driver', () => {
123
152
it ( 'should ignore issues with the same id but different day' , async ( t ) => {
124
153
const repository = { owner : 'acuminous' , name : 'knuff-github-driver' } ;
125
154
const reminder = {
126
- id : ' test' ,
155
+ id : ` test- ${ crypto . randomBytes ( 10 ) . toString ( 'hex' ) } ` ,
127
156
title : t . name ,
128
157
body : 'the body' ,
129
158
labels : [ 'l1' , 'l2' ] ,
130
159
date : new Date ( '2024-12-25' ) ,
160
+ timezone : 'Europe/London' ,
131
161
} ;
132
162
133
163
await driver . createReminder ( repository , reminder ) ;
0 commit comments