diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml new file mode 100644 index 0000000..898ea34 --- /dev/null +++ b/.github/workflows/integration-test.yml @@ -0,0 +1,11 @@ +name: Integration Test + +on: + workflow_dispatch: + schedule: + - cron: '0 0 * * *' # Runs the job at 00:00 UTC every day + +jobs: + app-integration-test: + uses: eliona-smart-building-assistant/app-integration-tests/.github/workflows/app-integration-test.yml@main + secrets: inherit diff --git a/app.go b/app.go index 1e2efe0..783f6fb 100644 --- a/app.go +++ b/app.go @@ -17,6 +17,7 @@ package main import ( "context" + utilshttp "github.com/eliona-smart-building-assistant/go-utils/http" nethttp "net/http" "thingdust/apiserver" "thingdust/apiservices" @@ -32,7 +33,6 @@ import ( "github.com/eliona-smart-building-assistant/go-utils/log" ) - func CheckConfigsandSetActiveState() { configs, err := conf.GetConfigs(context.Background()) if err != nil { @@ -110,7 +110,7 @@ func processSpaces(config apiserver.Configuration) { func fetchSpaces(config apiserver.Configuration) (thingdust.Spaces, error) { log.Debug("spaces", "Processing space with configID: %v", config.ConfigId) - request, err := http.NewRequestWithApiKey(config.ApiEndpoint + "/get_space_states", "X-API-KEY", config.ApiKey) + request, err := http.NewRequestWithApiKey(config.ApiEndpoint+"/get_space_states", "X-API-KEY", config.ApiKey) if err != nil { log.Error("spaces", "Error with request: %v", err) return nil, err @@ -120,7 +120,7 @@ func fetchSpaces(config apiserver.Configuration) (thingdust.Spaces, error) { log.Error("spaces", "Error reading spaces: %v", err) return nil, err } - return spaces, nil + return spaces, nil } func sendData(confSpace *apiserver.Space, spaces thingdust.Spaces, spaceName string) { @@ -134,7 +134,7 @@ func sendData(confSpace *apiserver.Space, spaces thingdust.Spaces, spaceName str }), AssetTypeName: *api.NewNullableString(common.Ptr("thingdust_space")), }) - log.Debug("spaces","Sending data for space %v", spaceName) + log.Debug("spaces", "Sending data for space %v", spaceName) if err != nil { log.Error("spaces", "Error sending data %v", err) } @@ -197,12 +197,12 @@ func occupancyToInt(occupancy string) int64 { } } - func listenApiRequests() { - err := nethttp.ListenAndServe(":"+common.Getenv("API_SERVER_PORT", "3000"), apiserver.NewRouter( - apiserver.NewConfigurationApiController(apiservices.NewConfigurationApiService()), - apiserver.NewVersionApiController(apiservices.NewVersionApiService()), - apiserver.NewCustomizationApiController(apiservices.NewCustomizationApiService()), - )) + err := nethttp.ListenAndServe(":"+common.Getenv("API_SERVER_PORT", "3000"), utilshttp.NewCORSEnabledHandler( + apiserver.NewRouter( + apiserver.NewConfigurationApiController(apiservices.NewConfigurationApiService()), + apiserver.NewVersionApiController(apiservices.NewVersionApiService()), + apiserver.NewCustomizationApiController(apiservices.NewCustomizationApiService()), + ))) log.Fatal("main", "Error in API Server: %v", err) } diff --git a/go.mod b/go.mod index d56d654..4379291 100644 --- a/go.mod +++ b/go.mod @@ -3,13 +3,14 @@ module thingdust go 1.18 require ( - github.com/eliona-smart-building-assistant/go-eliona v1.9.4 - github.com/eliona-smart-building-assistant/go-eliona-api-client/v2 v2.4.8 - github.com/eliona-smart-building-assistant/go-utils v1.0.18 + github.com/eliona-smart-building-assistant/app-integration-tests v0.0.5 + github.com/eliona-smart-building-assistant/go-eliona v1.9.9 + github.com/eliona-smart-building-assistant/go-eliona-api-client/v2 v2.4.20 + github.com/eliona-smart-building-assistant/go-utils v1.0.30 github.com/friendsofgo/errors v0.9.2 github.com/gorilla/mux v1.8.0 github.com/volatiletech/null/v8 v8.1.2 - github.com/volatiletech/sqlboiler/v4 v4.14.1 + github.com/volatiletech/sqlboiler/v4 v4.14.2 github.com/volatiletech/strmangle v0.0.4 gopkg.in/yaml.v3 v3.0.1 ) @@ -19,8 +20,10 @@ require ( replace github.com/ericlagergren/decimal => github.com/ericlagergren/decimal v0.0.0-20181231230500-73749d4874d5 require ( + github.com/davecgh/go-spew v1.1.1 // indirect github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05 // indirect github.com/gofrs/uuid v4.4.0+incompatible // indirect + github.com/gorilla/websocket v1.5.0 // indirect github.com/jackc/chunkreader/v2 v2.0.1 // indirect github.com/jackc/pgconn v1.14.0 // indirect github.com/jackc/pgio v1.0.0 // indirect @@ -28,13 +31,15 @@ require ( github.com/jackc/pgproto3/v2 v2.3.2 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect github.com/jackc/pgtype v1.14.0 // indirect - github.com/jackc/pgx/v4 v4.18.0 // indirect + github.com/jackc/pgx/v4 v4.18.1 // indirect github.com/jackc/puddle v1.3.0 // indirect - github.com/lib/pq v1.10.7 // indirect - github.com/spf13/cast v1.5.0 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/spf13/cast v1.5.1 // indirect + github.com/stretchr/testify v1.8.4 // indirect github.com/volatiletech/inflect v0.0.1 // indirect github.com/volatiletech/randomize v0.0.1 // indirect - golang.org/x/crypto v0.6.0 // indirect - golang.org/x/text v0.7.0 // indirect + golang.org/x/crypto v0.10.0 // indirect + golang.org/x/text v0.10.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect ) diff --git a/go.sum b/go.sum index ceb411c..bdd039e 100644 --- a/go.sum +++ b/go.sum @@ -116,12 +116,14 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eliona-smart-building-assistant/go-eliona v1.9.4 h1:ejT0ekEp6itLXnSg9aqqSgRVdToSzewFbglM/NSFx7M= -github.com/eliona-smart-building-assistant/go-eliona v1.9.4/go.mod h1:ulSBkPPvjEXJBQEgZ+5/XLj/USrEFygj2EByr83f8dk= -github.com/eliona-smart-building-assistant/go-eliona-api-client/v2 v2.4.8 h1:nWKpz32tk5y/zY3cBpe9J1aAuH0R88JOGSAIQXYdURY= -github.com/eliona-smart-building-assistant/go-eliona-api-client/v2 v2.4.8/go.mod h1:AdhCjJsNuT2WA6HpC++Kf4SBO0ZDJhwc3QnYk59naFQ= -github.com/eliona-smart-building-assistant/go-utils v1.0.18 h1:HwEmSKiMKyXVp2ZTMKOiluTdYzKsv8gX82CymfSTr+4= -github.com/eliona-smart-building-assistant/go-utils v1.0.18/go.mod h1:mDgXKlaqLWPdPu5QJVs7oxqRVqTKfgvmmqhMm1zFEyU= +github.com/eliona-smart-building-assistant/app-integration-tests v0.0.5 h1:syohiP7FaNhWRAE+fTBLqN6B4T2mrWt2WNikM/Wq4Sc= +github.com/eliona-smart-building-assistant/app-integration-tests v0.0.5/go.mod h1:D5fA+9HOneH/CuBU0W0fkPb16QERDA9+N7eejKPS6rI= +github.com/eliona-smart-building-assistant/go-eliona v1.9.9 h1:SeUnCQXHXU9P6JAdt/brgFsykLGvwULHndjvLXhtjMg= +github.com/eliona-smart-building-assistant/go-eliona v1.9.9/go.mod h1:A07FQWo1CIKsKOSxDe1Cs5hd3HU2zcM+qw4RcqJCvrw= +github.com/eliona-smart-building-assistant/go-eliona-api-client/v2 v2.4.20 h1:qygWkm9ACQz3eqD0r55VYjcThl/T4/ngdiSBvRhWY4E= +github.com/eliona-smart-building-assistant/go-eliona-api-client/v2 v2.4.20/go.mod h1:AdhCjJsNuT2WA6HpC++Kf4SBO0ZDJhwc3QnYk59naFQ= +github.com/eliona-smart-building-assistant/go-utils v1.0.30 h1:7y41sFzRGZhJBBst7jYOjl+9qFrKVaWaxL+nSLAeIuU= +github.com/eliona-smart-building-assistant/go-utils v1.0.30/go.mod h1:rmn9OFVA5ADax/tKPYR54e9P7Yi47VHF4RepCZxg4es= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -137,8 +139,8 @@ github.com/ericlagergren/decimal v0.0.0-20181231230500-73749d4874d5/go.mod h1:1y github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/friendsofgo/errors v0.9.2 h1:X6NYxef4efCBdwI7BgS820zFaN7Cphrmb+Pljdzjtgk= github.com/friendsofgo/errors v0.9.2/go.mod h1:yCvFW5AkDIL9qn7suHVLiI/gH228n7PC4Pn44IGoTOI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= @@ -215,8 +217,8 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -251,6 +253,8 @@ github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= @@ -331,8 +335,8 @@ github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08 github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= -github.com/jackc/pgx/v4 v4.18.0 h1:Ltaa1ePvc7msFGALnCrqKJVEByu/qYh5jJBYcDtAno4= -github.com/jackc/pgx/v4 v4.18.0/go.mod h1:FydWkUyadDmdNH/mHnGob881GawxeEm7TcMCzkb+qQE= +github.com/jackc/pgx/v4 v4.18.1 h1:YP7G1KABtKpB5IHrO9vYwSrCOhs7p3uqhvhhQBptya0= +github.com/jackc/pgx/v4 v4.18.1/go.mod h1:FydWkUyadDmdNH/mHnGob881GawxeEm7TcMCzkb+qQE= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= @@ -358,8 +362,8 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -371,8 +375,8 @@ github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= @@ -452,8 +456,8 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= @@ -474,8 +478,9 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= @@ -494,8 +499,9 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= @@ -505,8 +511,8 @@ github.com/volatiletech/null/v8 v8.1.2 h1:kiTiX1PpwvuugKwfvUNX/SU/5A2KGZMXfGD0DU github.com/volatiletech/null/v8 v8.1.2/go.mod h1:98DbwNoKEpRrYtGjWFctievIfm4n4MxG0A6EBUcoS5g= github.com/volatiletech/randomize v0.0.1 h1:eE5yajattWqTB2/eN8df4dw+8jwAzBtbdo5sbWC4nMk= github.com/volatiletech/randomize v0.0.1/go.mod h1:GN3U0QYqfZ9FOJ67bzax1cqZ5q2xuj2mXrXBjWaRTlY= -github.com/volatiletech/sqlboiler/v4 v4.14.1 h1:oiJp3f3tJfLt78X9f5S0F7+IO+D5gBRATgWADwRmXro= -github.com/volatiletech/sqlboiler/v4 v4.14.1/go.mod h1:65288sb8jBLnTynTumBK6eU8C2JwWsiPjoPihEfC0/A= +github.com/volatiletech/sqlboiler/v4 v4.14.2 h1:j5QnlR5/wYDmGDDTutI3BO+4oPBiqYoVrfReVr7VSxA= +github.com/volatiletech/sqlboiler/v4 v4.14.2/go.mod h1:65288sb8jBLnTynTumBK6eU8C2JwWsiPjoPihEfC0/A= github.com/volatiletech/strmangle v0.0.1/go.mod h1:F6RA6IkB5vq0yTG4GQ0UsbbRcl3ni9P76i+JrTBKFFg= github.com/volatiletech/strmangle v0.0.4 h1:CxrEPhobZL/PCZOTDSH1aq7s4Kv76hQpRoTVVlUOim4= github.com/volatiletech/strmangle v0.0.4/go.mod h1:ycDvbDkjDvhC0NUU8w3fWwl5JEMTV56vTKXzR3GeR+0= @@ -562,8 +568,9 @@ golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220511200225-c6db032c6c88/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -783,8 +790,9 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/icon b/icon index a6f5c4c..828a614 100644 --- a/icon +++ b/icon @@ -1 +1 @@ -"data:image/jpeg;base64,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" \ No newline at end of file +data:image/jpeg;base64,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 \ No newline at end of file diff --git a/integration_test.go b/integration_test.go new file mode 100644 index 0000000..b9bcb17 --- /dev/null +++ b/integration_test.go @@ -0,0 +1,43 @@ +// This file is part of the eliona project. +// Copyright © 2022 LEICOM iTEC AG. All Rights Reserved. +// ______ _ _ +// | ____| (_) +// | |__ | |_ ___ _ __ __ _ +// | __| | | |/ _ \| '_ \ / _` | +// | |____| | | (_) | | | | (_| | +// |______|_|_|\___/|_| |_|\__,_| +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NON INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +package main + +import ( + "github.com/eliona-smart-building-assistant/app-integration-tests/app" + "github.com/eliona-smart-building-assistant/app-integration-tests/assert" + "github.com/eliona-smart-building-assistant/app-integration-tests/test" + "testing" +) + +func TestApp(t *testing.T) { + app.StartApp() + test.AppWorks(t) + t.Run("TestAssetTypes", assetTypes) + t.Run("TestSchema", schema) + app.StopApp() +} + +func assetTypes(t *testing.T) { + t.Parallel() + + assert.AssetTypeExists(t, "thingdust_space", []string{"humidity", "temperature", "occupancy"}) +} + +func schema(t *testing.T) { + t.Parallel() + + assert.SchemaExists(t, "thingdust", []string{"config", "spaces"}) +} diff --git a/metadata.json b/metadata.json index ed18352..2abe799 100644 --- a/metadata.json +++ b/metadata.json @@ -1,4 +1,5 @@ -{ +{ + "name": "thingdust", "displayName": { "en": "Thingdust App", "de": "Thingdust App" @@ -10,7 +11,8 @@ "dashboardTemplateNames": [ "Thingdust" ], - "apiSpecificationPath": "/v1/version/openapi.json", + "apiUrl": "v1", + "apiSpecificationPath": "/version/openapi.json", "documentationUrl": "https://doc.eliona.io/collection/eliona-apps/externe-apps/thingdust", "useEnvironment": [ "CONNECTION_STRING", "API_ENDPOINT", "API_TOKEN" ] }