PLTCONN-3577: Init command and fixing tests

This commit is contained in:
fangming-ning-sp
2023-09-09 12:25:39 -05:00
parent a9944a1b28
commit e027554ba1
4 changed files with 106 additions and 10 deletions

View File

@@ -21,9 +21,10 @@ import (
var staticDir embed.FS
const (
staticDirName = "static"
packageJsonName = "package.json"
connectorSpecName = "connector-spec.json"
connectorDirName = "connector"
connectorTemplatePath = "static/" + connectorDirName
packageJsonName = "package.json"
connectorSpecName = "connector-spec.json"
)
// newConnInitCmd is a connectors subcommand used to initialize a new connector project.
@@ -54,12 +55,12 @@ func newConnInitCmd() *cobra.Command {
return
}
err := fs.WalkDir(staticDir, staticDirName, func(path string, d fs.DirEntry, err error) error {
err := fs.WalkDir(staticDir, connectorTemplatePath, func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if d.Name() == staticDirName {
if d.Name() == connectorDirName {
return nil
}
@@ -68,7 +69,7 @@ func newConnInitCmd() *cobra.Command {
return err
}
} else {
fileName := filepath.Join(projName, strings.TrimPrefix(path, staticDirName))
fileName := filepath.Join(projName, strings.TrimPrefix(path, connectorTemplatePath))
data, err := staticDir.ReadFile(path)
if err != nil {
@@ -81,7 +82,7 @@ func newConnInitCmd() *cobra.Command {
}
if d.Name() == packageJsonName || d.Name() == connectorSpecName {
fileAbsPath, err := filepath.Abs(filepath.Join(projName, strings.TrimPrefix(path, staticDirName)))
fileAbsPath, err := filepath.Abs(filepath.Join(projName, strings.TrimPrefix(path, connectorTemplatePath)))
if err != nil {
return err
}

View File

@@ -18,6 +18,7 @@ func newConnCustomizersCmd(client client.Client) *cobra.Command {
}
cmd.AddCommand(
newCustomizerInitCmd(),
newCustomizerListCmd(client),
newCustomizerCreateCmd(client),
newCustomizerGetCmd(client),

View File

@@ -0,0 +1,94 @@
// Copyright (c) 2023, SailPoint Technologies, Inc. All rights reserved.
package connector
import (
"errors"
"fmt"
"io/fs"
"os"
"path/filepath"
"strings"
"github.com/spf13/cobra"
)
const customizerDirName = "static/customizer"
func newCustomizerInitCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "init <customizer-name>",
Short: "Initialize new connector customizer project",
Long: `init sets up a new TypeScript project with sample connector customizer included for reference.`,
Example: "sail conn customizers init \"My Connector\"",
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
projName := args[0]
if projName == "" {
printError(cmd.ErrOrStderr(), errors.New("connector customizer name cannot be empty"))
return
}
if f, err := os.Stat(projName); err == nil && f.IsDir() && f.Name() == projName {
printError(cmd.ErrOrStderr(), fmt.Errorf("Error: project '%s' already exists.\n", projName))
return
}
if err := createDir(projName); err != nil {
_ = os.RemoveAll(projName)
printError(cmd.ErrOrStderr(), err)
return
}
err := fs.WalkDir(staticDir, customizerDirName, func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if d.Name() == customizerDirName {
return nil
}
if d.IsDir() {
if err := createDir(filepath.Join(projName, d.Name())); err != nil {
return err
}
} else {
fileName := filepath.Join(projName, strings.TrimPrefix(path, customizerDirName))
data, err := staticDir.ReadFile(path)
if err != nil {
return err
}
if err := createFile(fileName, data); err != nil {
return err
}
}
if d.Name() == packageJsonName {
fileAbsPath, err := filepath.Abs(filepath.Join(projName, strings.TrimPrefix(path, customizerDirName)))
if err != nil {
return err
}
if err := createFileFromTemplate(projName, d.Name(), fileAbsPath); err != nil {
return err
}
return nil
}
return nil
})
if err != nil {
_ = os.RemoveAll(projName)
printError(cmd.ErrOrStderr(), err)
return
}
printDir(cmd.OutOrStdout(), projName, 0)
_, _ = fmt.Fprintf(cmd.OutOrStdout(), "Successfully created project '%s'.\nRun `npm install` to install dependencies.\n", projName)
},
}
return cmd
}

View File

@@ -1,5 +1,5 @@
import { connector } from './index'
import { StandardCommand } from '@sailpoint/connector-sdk'
import { Connector, RawResponse, ResponseType, StandardCommand } from '@sailpoint/connector-sdk'
import { PassThrough } from 'stream'
const mockConfig: any = {
@@ -10,7 +10,7 @@ process.env.CONNECTOR_CONFIG = Buffer.from(JSON.stringify(mockConfig)).toString(
describe('connector unit tests', () => {
it('connector SDK major version should be 0', async () => {
expect((await connector()).sdkVersion).toStrictEqual(0)
expect((await connector()).sdkVersion).toStrictEqual(Connector.SDK_VERSION)
})
it('should execute stdTestConnectionHandler', async () => {
@@ -18,7 +18,7 @@ describe('connector unit tests', () => {
StandardCommand.StdTestConnection,
{},
undefined,
new PassThrough({ objectMode: true }).on('data', (chunk) => expect(chunk).toStrictEqual({}))
new PassThrough({ objectMode: true }).on('data', (chunk) => expect(chunk).toStrictEqual(new RawResponse ({}, ResponseType.Output)))
)
})
})