4
4
"bytes"
5
5
"context"
6
6
"net/http"
7
+ "regexp"
7
8
"testing"
8
9
9
10
"github.com/google/uuid"
@@ -14,6 +15,7 @@ import (
14
15
"github.com/coder/coder/coderd/audit"
15
16
"github.com/coder/coder/coderd/coderdtest"
16
17
"github.com/coder/coder/coderd/database"
18
+ "github.com/coder/coder/coderd/gitauth"
17
19
"github.com/coder/coder/coderd/provisionerdserver"
18
20
"github.com/coder/coder/codersdk"
19
21
"github.com/coder/coder/examples"
@@ -436,21 +438,63 @@ func TestTemplateVersionParameters(t *testing.T) {
436
438
437
439
func TestTemplateVersionsGitAuth (t * testing.T ) {
438
440
t .Parallel ()
439
- t .Run ("WithoutAny " ,func (t * testing.T ) {
441
+ t .Run ("Empty " ,func (t * testing.T ) {
440
442
t .Parallel ()
441
- client := coderdtest .New (t ,nil )
443
+ client := coderdtest .New (t ,& coderdtest. Options { IncludeProvisionerDaemon : true } )
442
444
user := coderdtest .CreateFirstUser (t ,client )
443
445
version := coderdtest .CreateTemplateVersion (t ,client ,user .OrganizationID ,nil )
446
+ coderdtest .AwaitTemplateVersionJob (t ,client ,version .ID )
444
447
445
448
ctx ,cancel := context .WithTimeout (context .Background (),testutil .WaitLong )
446
449
defer cancel ()
447
450
448
451
_ ,err := client .TemplateVersionGitAuth (ctx ,version .ID )
449
452
require .NoError (t ,err )
450
453
})
451
- // t.Run("", func(t *testing.T) {
454
+ t .Run ("Authenticated" ,func (t * testing.T ) {
455
+ t .Parallel ()
456
+ client := coderdtest .New (t ,& coderdtest.Options {
457
+ IncludeProvisionerDaemon :true ,
458
+ GitAuthConfigs : []* gitauth.Config {{
459
+ OAuth2Config :& oauth2Config {},
460
+ ID :"github" ,
461
+ Regex :regexp .MustCompile (`github\.com` ),
462
+ Type :codersdk .GitProviderGitHub ,
463
+ }},
464
+ })
465
+ user := coderdtest .CreateFirstUser (t ,client )
466
+ version := coderdtest .CreateTemplateVersion (t ,client ,user .OrganizationID ,& echo.Responses {
467
+ Parse :echo .ParseComplete ,
468
+ ProvisionPlan : []* proto.Provision_Response {{
469
+ Type :& proto.Provision_Response_Complete {
470
+ Complete :& proto.Provision_Complete {
471
+ GitAuthProviders : []string {"github" },
472
+ },
473
+ },
474
+ }},
475
+ })
476
+ version = coderdtest .AwaitTemplateVersionJob (t ,client ,version .ID )
477
+ require .Empty (t ,version .Job .Error )
478
+ ctx ,cancel := context .WithTimeout (context .Background (),testutil .WaitLong )
479
+ defer cancel ()
452
480
453
- // })
481
+ // Not authenticated to start!
482
+ providers ,err := client .TemplateVersionGitAuth (ctx ,version .ID )
483
+ require .NoError (t ,err )
484
+ require .Len (t ,providers ,1 )
485
+ require .False (t ,providers [0 ].Authenticated )
486
+
487
+ // Perform the Git auth callback to authenticate the user...
488
+ resp := gitAuthCallback (t ,"github" ,client )
489
+ _ = resp .Body .Close ()
490
+ require .Equal (t ,http .StatusTemporaryRedirect ,resp .StatusCode )
491
+
492
+ // Ensure that the returned Git auth for the template is authenticated!
493
+ providers ,err = client .TemplateVersionGitAuth (ctx ,version .ID )
494
+ require .NoError (t ,err )
495
+ require .Len (t ,providers ,1 )
496
+ require .True (t ,providers [0 ].Authenticated )
497
+ })
454
498
}
455
499
456
500
func TestTemplateVersionResources (t * testing.T ) {