Initial commit
This commit is contained in:
commit
c9e906bcee
13 changed files with 365 additions and 0 deletions
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
.env
|
||||
*.env
|
||||
external/
|
||||
vendor/
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[submodule "external/bottin"]
|
||||
path = external/bottin
|
||||
url = https://git.agecem.com/bottin/bottin
|
38
Makefile
Normal file
38
Makefile
Normal file
|
@ -0,0 +1,38 @@
|
|||
## This Makefile uses the help target explained in the following blogpost:
|
||||
##
|
||||
## https://victoria.dev/blog/how-to-create-a-self-documenting-makefile/
|
||||
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
.PHONY: help
|
||||
help: ## Show this help
|
||||
@egrep -h '\s##\s' $(MAKEFILE_LIST) | \
|
||||
sort | \
|
||||
awk \
|
||||
'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
|
||||
|
||||
.PHONY: install
|
||||
install: ## Use `go install` to build and link the executable
|
||||
go install -a ./cmd/bottinagenda/
|
||||
|
||||
.PHONY: compose-ps
|
||||
compose-ps: compose-acceptance-ps ## Show state of containers of all pipelines
|
||||
|
||||
.PHONY: compose-acceptance-up
|
||||
compose-acceptance-up: ## Build and run test containers using compose, then run the acceptance tests within
|
||||
docker-compose -f deployments/compose/bottinagenda-acceptance/compose.yaml up -d --build
|
||||
|
||||
.PHONY: compose-acceptance-down
|
||||
compose-acceptance-down: ## Remove the containers created by acceptance pipeline
|
||||
docker-compose -f deployments/compose/bottinagenda-acceptance/compose.yaml down
|
||||
|
||||
.PHONY: compose-acceptance-ps
|
||||
compose-acceptance-ps: ## Show state of containers from acceptance pipeline
|
||||
docker-compose -f deployments/compose/bottinagenda-acceptance/compose.yaml ps
|
||||
|
||||
.PHONY: compose-acceptance-logs
|
||||
compose-acceptance-logs: ## Follow the logs for acceptance container
|
||||
docker-compose -f deployments/compose/bottinagenda-acceptance/compose.yaml logs -f bottinagenda_api
|
||||
|
||||
.PHONY: compose-acceptance-test
|
||||
compose-acceptance-test: compose-acceptance-up compose-acceptance-logs ## Start acceptance pipeline and follow `go test` logs on stdout
|
5
cmd/bottinagenda/main.go
Normal file
5
cmd/bottinagenda/main.go
Normal file
|
@ -0,0 +1,5 @@
|
|||
package main
|
||||
|
||||
func main() {
|
||||
Execute()
|
||||
}
|
55
cmd/bottinagenda/root.go
Normal file
55
cmd/bottinagenda/root.go
Normal file
|
@ -0,0 +1,55 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
var cfgFile string
|
||||
|
||||
var rootCmd = &cobra.Command{
|
||||
Use: "bottinagenda",
|
||||
Short: "Application de gestion de distribution d'agendas",
|
||||
}
|
||||
|
||||
// Adds child commands to the root command and sets flags
|
||||
func Execute() {
|
||||
if err := rootCmd.Execute(); err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func initConfig() {
|
||||
if cfgFile != "" {
|
||||
// Use config file from the flag.
|
||||
viper.SetConfigFile(cfgFile)
|
||||
} else {
|
||||
// Find home directory.
|
||||
home, err := os.UserHomeDir()
|
||||
cobra.CheckErr(err)
|
||||
|
||||
// Search config in home directory with name ".bottin-agenda" (without extension).
|
||||
viper.AddConfigPath(home)
|
||||
viper.SetConfigType("yaml")
|
||||
viper.SetConfigName(".bottinagenda")
|
||||
}
|
||||
|
||||
viper.SetEnvPrefix("BOTTINAGENDA")
|
||||
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
|
||||
viper.AutomaticEnv() // read in environment variables that match
|
||||
|
||||
// If a config file is found, read it in.
|
||||
if err := viper.ReadInConfig(); err == nil {
|
||||
fmt.Fprintln(os.Stderr, "Using config file:", viper.ConfigFileUsed())
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
cobra.OnInitialize(initConfig)
|
||||
|
||||
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.bottinagenda.yaml)")
|
||||
}
|
12
cmd/bottinagenda/server.go
Normal file
12
cmd/bottinagenda/server.go
Normal file
|
@ -0,0 +1,12 @@
|
|||
package main
|
||||
|
||||
//serverCmd
|
||||
//serverAPICmd
|
||||
//serverUICmd
|
||||
//init:
|
||||
// - rootCmd < serverCmd
|
||||
// - serverCmd < serverAPICmd
|
||||
// - serverCmd < serverUICmd
|
||||
//bindServerFlags (if any) on serverCmd
|
||||
//bindServerAPIFlags on serverAPICmd
|
||||
//bindServerUIFlags on serverUICmd
|
41
deployments/compose/bottinagenda-acceptance/compose.yaml
Normal file
41
deployments/compose/bottinagenda-acceptance/compose.yaml
Normal file
|
@ -0,0 +1,41 @@
|
|||
services:
|
||||
bottin_db:
|
||||
image: 'postgres:16'
|
||||
environment:
|
||||
POSTGRES_USER: 'bottin'
|
||||
POSTGRES_PASSWORD: 'bottin'
|
||||
|
||||
bottin_api:
|
||||
depends_on:
|
||||
- 'bottin_db'
|
||||
image: 'git.agecem.com/bottin/bottin:acceptance'
|
||||
build:
|
||||
context: '../../../external/bottin/'
|
||||
dockerfile: './deployments/docker/bottin/Dockerfile'
|
||||
environment:
|
||||
BOTTIN_SERVER_DB_USER: 'bottin'
|
||||
BOTTIN_SERVER_DB_PASSWORD: 'bottin'
|
||||
BOTTIN_SERVER_DB_HOST: 'bottin_db'
|
||||
restart: 'unless-stopped'
|
||||
command: ['cat', '/msg']
|
||||
|
||||
bottinagenda_db:
|
||||
image: 'postgres:16'
|
||||
environment:
|
||||
POSTGRES_USER: 'bottinagenda'
|
||||
POSTGRES_PASSWORD: 'bottinagenda'
|
||||
|
||||
bottinagenda_api:
|
||||
depends_on:
|
||||
- 'bottinagenda_db'
|
||||
image: 'git.agecem.com/bottin/bottinagenda:acceptance'
|
||||
build:
|
||||
context: '../../../'
|
||||
dockerfile: './deployments/docker/bottinagenda/Dockerfile'
|
||||
environment:
|
||||
BOTTINAGENDA_SERVER_DB_USER: 'bottinagenda'
|
||||
BOTTINAGENDA_SERVER_DB_PASSWORD: 'bottinagenda'
|
||||
BOTTINAGENDA_SERVER_DB_HOST: 'bottinagenda_db'
|
||||
#BOTTINAGENDA_BOTTIN_HOST?
|
||||
restart: 'unless-stopped'
|
||||
command: ['cat', '/msg']
|
28
deployments/docker/bottinagenda/Dockerfile
Normal file
28
deployments/docker/bottinagenda/Dockerfile
Normal file
|
@ -0,0 +1,28 @@
|
|||
FROM golang:1.23 as build
|
||||
|
||||
ARG bottinagenda_version
|
||||
|
||||
LABEL author="vlbeaudoin"
|
||||
|
||||
WORKDIR /go/src/app
|
||||
|
||||
COPY go.mod go.sum LICENSE ./
|
||||
|
||||
ADD cmd/ cmd/
|
||||
ADD pkg/ pkg/
|
||||
ADD queries/ queries/
|
||||
ADD ui/ ui/
|
||||
|
||||
RUN CGO_ENABLED=0 go build \
|
||||
-a \
|
||||
-o bottinagenda \
|
||||
-ldflags="-X 'git.agecem.com/bottin/bottinagenda/pkg/bottinagenda.version=$bottinagenda_version'" \
|
||||
./cmd/bottinagenda/
|
||||
|
||||
# Alpine
|
||||
|
||||
FROM alpine:3.20 as run
|
||||
|
||||
COPY --from=build /go/src/app/bottinagenda /usr/bin/bottinagenda
|
||||
|
||||
CMD ["bottinagenda", "help"]
|
29
go.mod
Normal file
29
go.mod
Normal file
|
@ -0,0 +1,29 @@
|
|||
module git.agecem.com/bottin/bottinagenda
|
||||
|
||||
go 1.23.1
|
||||
|
||||
require (
|
||||
git.agecem.com/bottin/bottin v0.2.0 // indirect
|
||||
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/magiconair/properties v1.8.7 // indirect
|
||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
|
||||
github.com/sagikazarmark/locafero v0.4.0 // indirect
|
||||
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
|
||||
github.com/sourcegraph/conc v0.3.0 // indirect
|
||||
github.com/spf13/afero v1.11.0 // indirect
|
||||
github.com/spf13/cast v1.6.0 // indirect
|
||||
github.com/spf13/cobra v1.8.1 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/spf13/viper v1.19.0 // indirect
|
||||
github.com/subosito/gotenv v1.6.0 // indirect
|
||||
go.uber.org/atomic v1.9.0 // indirect
|
||||
go.uber.org/multierr v1.9.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
|
||||
golang.org/x/sys v0.18.0 // indirect
|
||||
golang.org/x/text v0.14.0 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
62
go.sum
Normal file
62
go.sum
Normal file
|
@ -0,0 +1,62 @@
|
|||
git.agecem.com/bottin/bottin v0.2.0 h1:zzRsk8u5fwNIak9hZxp//uLyLjhEPZGikIQLsK9x9gc=
|
||||
git.agecem.com/bottin/bottin v0.2.0/go.mod h1:XMf3meOkXc93sE8tgGDRaUqOGcRWy6rtwB+O8eIxvGE=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
|
||||
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
|
||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
|
||||
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
|
||||
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
|
||||
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
|
||||
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
|
||||
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
|
||||
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
|
||||
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
|
||||
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
|
||||
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
|
||||
github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
|
||||
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
|
||||
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
|
||||
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
|
||||
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/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
|
||||
github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
|
||||
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
|
||||
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
|
||||
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||
go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
|
||||
go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
|
||||
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
|
||||
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
|
||||
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
|
||||
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
||||
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
6
pkg/bottinagenda/build.go
Normal file
6
pkg/bottinagenda/build.go
Normal file
|
@ -0,0 +1,6 @@
|
|||
package bottinagenda
|
||||
|
||||
// version is set at build time
|
||||
var version string
|
||||
|
||||
func Version() string { return version }
|
63
pkg/bottinagenda/config.go
Normal file
63
pkg/bottinagenda/config.go
Normal file
|
@ -0,0 +1,63 @@
|
|||
package bottinagenda
|
||||
|
||||
import "github.com/spf13/viper"
|
||||
|
||||
func ParseConfig() (cfg Config, err error) {
|
||||
return cfg, viper.Unmarshal(&cfg)
|
||||
}
|
||||
|
||||
type APIClientConfig struct {
|
||||
Host string
|
||||
Key string
|
||||
Port int
|
||||
TLS TLSClientConfig
|
||||
}
|
||||
|
||||
type APIServerConfig struct {
|
||||
Host string
|
||||
Key string
|
||||
Port int
|
||||
Postgres PostgresConfig
|
||||
TLS TLSServerConfig
|
||||
}
|
||||
|
||||
type ClientConfig struct {
|
||||
API APIClientConfig
|
||||
OutputStyle string
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
Client ClientConfig
|
||||
Server ServerConfig
|
||||
}
|
||||
|
||||
type PostgresConfig struct {
|
||||
Database string
|
||||
Host string
|
||||
Password string
|
||||
Port int
|
||||
User string
|
||||
SSLMode string
|
||||
}
|
||||
|
||||
type ServerConfig struct {
|
||||
API APIServerConfig
|
||||
UI struct {
|
||||
Host string
|
||||
Password string
|
||||
Port int
|
||||
Username string
|
||||
API APIClientConfig
|
||||
}
|
||||
}
|
||||
|
||||
type TLSClientConfig struct {
|
||||
Enabled bool
|
||||
SkipVerify bool
|
||||
}
|
||||
|
||||
type TLSServerConfig struct {
|
||||
Enabled bool
|
||||
CertFile string
|
||||
KeyFile string
|
||||
}
|
19
pkg/bottinagenda/server_test.go
Normal file
19
pkg/bottinagenda/server_test.go
Normal file
|
@ -0,0 +1,19 @@
|
|||
package bottinagenda
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.agecem.com/bottin/bottin/pkg/bottin"
|
||||
)
|
||||
|
||||
func TestBottinAPIClient(t *testing.T) {
|
||||
var bottinClient bottin.APIClient
|
||||
t.Run("message", func(t *testing.T) {
|
||||
t.Log(bottinClient.Message())
|
||||
})
|
||||
}
|
||||
|
||||
func TestServer(t *testing.T) {
|
||||
//go RunAPIServer
|
||||
|
||||
}
|
Reference in a new issue