Skip to content

Commit

Permalink
fix: initial commit with basic implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
dnitsch committed Oct 24, 2022
1 parent 4d30bc3 commit 99ab409
Show file tree
Hide file tree
Showing 12 changed files with 532 additions and 2 deletions.
17 changes: 15 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,15 @@
# uistrategy
Config driven UI driver for data seeding and automated tests
# UI Strategy

Config driven UI driver for data seeding for cases where there isn't an REST API available and automated UI tests stored in declarative configuration files.

Part of strategy series :D - see reststrategy :wink:

Run local tests

`docker run --name=pb-app --detach -p 8090:8090 dnitsch/reststrategy-sample:latest`

Then navigate to this [page](http://127.0.0.1:8090/_/?installer#)

## Underlying Web Driver

This module and CLI use the [Go-Rod](https://github.com/go-rod/rod) which uses the CPD protocol.
8 changes: 8 additions & 0 deletions cmd/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package main

import uistrategy "github.com/dnitsch/uistrategy/cmd/uistrategy"

func main() {
// init loggerHere or in init function
uistrategy.Execute()
}
53 changes: 53 additions & 0 deletions cmd/uistrategy/uistrategy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package cmd

import (
"os"

log "github.com/dnitsch/simplelog"
"github.com/dnitsch/uistrategy"
"github.com/dnitsch/uistrategy/internal/cmdutil"
"github.com/dnitsch/uistrategy/internal/util"
"github.com/spf13/cobra"
)

var (
path string
verbose bool
rootCmd = &cobra.Command{
Use: "uistrategy",
RunE: runActions,
Short: "executes a series of actions against a URL",
Long: ``,
}
)

func Execute() {
if err := rootCmd.Execute(); err != nil {
util.Exit(err)
}
util.CleanExit()
}

func init() {
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Verbose output")
rootCmd.PersistentFlags().StringVarP(&path, "input", "i", "", "Path to the input file containing the config definition for the UIStrategy")
}

// runActions parses and executes the provided actions
func runActions(cmd *cobra.Command, args []string) error {
conf := &uistrategy.UiStrategyConf{}
ui := uistrategy.New().WithLogger(logger(verbose))

if err := cmdutil.YamlParseInput(conf, path); err != nil {
return err
}

return cmdutil.RunActions(ui, conf)
}

func logger(verbose bool) log.Logger {
if verbose {
return log.New(os.Stderr, log.DebugLvl)
}
return log.New(os.Stderr, log.ErrorLvl)
}
23 changes: 23 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
module github.com/dnitsch/uistrategy

go 1.19

require github.com/go-rod/rod v0.112.0

require (
github.com/inconshreveable/mousetrap v1.0.1 // indirect
github.com/mattn/go-colorable v0.1.12 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/rs/zerolog v1.28.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 // indirect
)

require (
github.com/dnitsch/simplelog v1.5.1
github.com/spf13/cobra v1.6.0
github.com/ysmood/goob v0.4.0 // indirect
github.com/ysmood/gson v0.7.1 // indirect
github.com/ysmood/leakless v0.8.0 // indirect
gopkg.in/yaml.v2 v2.4.0
)
37 changes: 37 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/dnitsch/simplelog v1.5.1 h1:PhIFuZluJIAUiKgJ+xBzTZwqe49PFg20d3ToDucu3Dg=
github.com/dnitsch/simplelog v1.5.1/go.mod h1:scPvWULBlruthxS6seGJkMbc1DM5f44IRZNmaSZCJVU=
github.com/go-rod/rod v0.112.0 h1:U9Yc+quw4hxZ6GrdbWFBeylvaYElEKM9ijFW2LYkGlA=
github.com/go-rod/rod v0.112.0/go.mod h1:GZDtmEs6RpF6kBRYpGCZXxXlKNneKVPiKOjaMbmVVjE=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=
github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.28.0 h1:MirSo27VyNi7RJYP3078AA1+Cyzd2GB66qy3aUHvsWY=
github.com/rs/zerolog v1.28.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/spf13/cobra v1.6.0 h1:42a0n6jwCot1pUmomAp4T7DeMD+20LFv4Q54pxLf2LI=
github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/ysmood/goob v0.4.0 h1:HsxXhyLBeGzWXnqVKtmT9qM7EuVs/XOgkX7T6r1o1AQ=
github.com/ysmood/goob v0.4.0/go.mod h1:u6yx7ZhS4Exf2MwciFr6nIM8knHQIE22lFpWHnfql18=
github.com/ysmood/got v0.31.3/go.mod h1:pE1l4LOwOBhQg6A/8IAatkGp7uZjnalzrZolnlhhMgY=
github.com/ysmood/gotrace v0.6.0/go.mod h1:TzhIG7nHDry5//eYZDYcTzuJLYQIkykJzCRIo4/dzQM=
github.com/ysmood/gson v0.7.1 h1:zKL2MTGtynxdBdlZjyGsvEOZ7dkxaY5TH6QhAbTgz0Q=
github.com/ysmood/gson v0.7.1/go.mod h1:3Kzs5zDl21g5F/BlLTNcuAGAYLKt2lV5G8D1zF3RNmg=
github.com/ysmood/leakless v0.8.0 h1:BzLrVoiwxikpgEQR0Lk8NyBN5Cit2b1z+u0mgL4ZJak=
github.com/ysmood/leakless v0.8.0/go.mod h1:R8iAXPRaG97QJwqxs74RdwzcRHT1SWCGTNqY8q0JvMQ=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 h1:foEbQz/B0Oz6YIqu/69kfXPYeFQAuuMYFkjaqXzl5Wo=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
21 changes: 21 additions & 0 deletions internal/cmdutil/cmdutil.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package cmdutil

import (
"os"

"github.com/dnitsch/uistrategy"
"gopkg.in/yaml.v2"
)

func RunActions(uistrategy *uistrategy.Web, conf *uistrategy.UiStrategyConf) error {
return nil
}

// YamlParseInput will return a filled pointer with Unmarshalled data
func YamlParseInput[T any](input *T, path string) error {
b, err := os.ReadFile(path)
if err != nil {
return err
}
return yaml.Unmarshal(b, input)
}
5 changes: 5 additions & 0 deletions internal/config/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package config

const (
SELF_NAME = "uistratetegy"
)
31 changes: 31 additions & 0 deletions internal/util/helper.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package util

import (
"log"
"os"
)

func HomeDir() string {
home, err := os.UserHomeDir()
if err != nil {
log.Fatal("unable to get the user home dir")
}
return home
}

func WriteDataDir(datadir string) {
os.MkdirAll(datadir, 0755)
}

// CleanExit signals 0 exit code and should clean up any current process
func CleanExit() {
os.Exit(0)
}

func Exit(err error) {
log.Fatal(err)
}

func Str(s string) *string {
return &s
}
1 change: 1 addition & 0 deletions internal/util/helper_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package util
8 changes: 8 additions & 0 deletions test-input.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
baseUrl: http://127.0.0.1:8090
timeout: 30
reuseBrowserCache: false
auth:
username: ...
password: ddddd
actions:
- name: createCollection-1
Loading

0 comments on commit 99ab409

Please sign in to comment.