flamingo.me/flamingo-commerce/v3@v3.11.0/test/integrationtest/projecttest/helper/helper.go (about) 1 package helper 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 "time" 8 9 "flamingo.me/graphql" 10 "github.com/gavv/httpexpect/v2" 11 12 fakeCustomer "flamingo.me/flamingo-commerce/v3/test/integrationtest/projecttest/modules/customer" 13 "flamingo.me/flamingo/v3" 14 "flamingo.me/flamingo/v3/core/auth" 15 fakeAuth "flamingo.me/flamingo/v3/core/auth/fake" 16 "flamingo.me/flamingo/v3/core/healthcheck" 17 "flamingo.me/flamingo/v3/core/locale" 18 "flamingo.me/flamingo/v3/core/security" 19 "flamingo.me/flamingo/v3/framework/cmd" 20 "flamingo.me/flamingo/v3/framework/web/filter" 21 22 "flamingo.me/flamingo-commerce/v3/customer" 23 integrationCart "flamingo.me/flamingo-commerce/v3/test/integrationtest/projecttest/modules/cart" 24 "flamingo.me/flamingo-commerce/v3/test/integrationtest/projecttest/modules/payment" 25 "flamingo.me/flamingo-commerce/v3/test/integrationtest/projecttest/modules/placeorder" 26 27 "flamingo.me/dingo" 28 29 "flamingo.me/flamingo/v3/core/requestlogger" 30 "flamingo.me/flamingo/v3/core/robotstxt" 31 "flamingo.me/flamingo/v3/core/zap" 32 "flamingo.me/flamingo/v3/framework" 33 flamingoFramework "flamingo.me/flamingo/v3/framework/flamingo" 34 "flamingo.me/flamingo/v3/framework/opencensus" 35 "flamingo.me/flamingo/v3/framework/prefixrouter" 36 37 "flamingo.me/flamingo-commerce/v3/breadcrumbs" 38 "flamingo.me/flamingo-commerce/v3/cart" 39 "flamingo.me/flamingo-commerce/v3/category" 40 "flamingo.me/flamingo-commerce/v3/checkout" 41 "flamingo.me/flamingo-commerce/v3/order" 42 "flamingo.me/flamingo-commerce/v3/price" 43 "flamingo.me/flamingo-commerce/v3/product" 44 "flamingo.me/flamingo-commerce/v3/search" 45 "flamingo.me/flamingo-commerce/v3/test/integrationtest" 46 projectTestGraphql "flamingo.me/flamingo-commerce/v3/test/integrationtest/projecttest/graphql" 47 "flamingo.me/flamingo-commerce/v3/w3cdatalayer" 48 ) 49 50 // modulesDemoProject return slice of modules that we want to have in our example app for testing 51 func modulesDemoProject() []dingo.Module { 52 return []dingo.Module{ 53 new(framework.InitModule), 54 new(cmd.Module), 55 new(zap.Module), 56 new(flamingoFramework.SessionModule), 57 new(prefixrouter.Module), 58 new(product.Module), 59 new(locale.Module), 60 new(customer.Module), 61 new(fakeCustomer.Module), 62 new(cart.Module), 63 new(checkout.Module), 64 new(search.Module), 65 new(category.Module), 66 new(requestlogger.Module), 67 new(filter.DefaultCacheStrategyModule), 68 new(auth.WebModule), 69 new(fakeAuth.Module), 70 new(breadcrumbs.Module), 71 new(order.Module), 72 new(healthcheck.Module), 73 new(w3cdatalayer.Module), 74 new(robotstxt.Module), 75 new(security.Module), 76 new(opencensus.Module), 77 new(price.Module), 78 new(projectTestGraphql.Module), 79 new(graphql.Module), 80 new(payment.Module), 81 new(placeorder.Module), 82 new(integrationCart.Module), 83 } 84 } 85 86 // BootupDemoProject boots up a complete demo project 87 func BootupDemoProject(configDir string) integrationtest.BootupInfo { 88 return integrationtest.Bootup(modulesDemoProject(), configDir, nil) 89 } 90 91 // GenerateGraphQL generates the graphql interfaces for the demo project and saves to filesystem. 92 // use via makefile - each time you modify the schema 93 func GenerateGraphQL() { 94 application, err := flamingo.NewApplication(modulesDemoProject(), flamingo.ConfigDir("config")) 95 if err != nil { 96 panic(err) 97 } 98 99 servicesI, err := application.ConfigArea().Injector.GetInstance(new([]graphql.Service)) 100 if err != nil { 101 panic(err) 102 } 103 services := servicesI.([]graphql.Service) 104 err = graphql.Generate(services, "graphql", "graphql/schema") 105 if err != nil { 106 panic(err) 107 } 108 } 109 110 // GraphQlRequest helper to get a initialised httpexpect request with the graphql query - used in tests 111 func GraphQlRequest(t *testing.T, e *httpexpect.Expect, query string) *httpexpect.Request { 112 t.Helper() 113 query = strings.Replace(query, "\n", "", -1) 114 query = strings.Replace(query, "\t", "", -1) 115 query = strings.Replace(query, `"`, `\"`, -1) 116 graphQlQuery := fmt.Sprintf(`{"variables":{},"query":"%v"}`, query) 117 118 return e.POST("/en/graphql").WithHeader("Content-Type", "application/json").WithBytes([]byte(graphQlQuery)) 119 } 120 121 // AsyncCheckWithTimeout calls fn every 10ms until timeout reached or fn doesn't return err anymore 122 func AsyncCheckWithTimeout(t *testing.T, timeoutAfter time.Duration, fn func() error) { 123 t.Helper() 124 timeout := time.NewTimer(timeoutAfter) 125 ticker := time.NewTicker(100 * time.Millisecond) 126 defer ticker.Stop() 127 128 for { 129 err := fn() 130 131 if err == nil { 132 return 133 } 134 135 select { 136 case <-timeout.C: 137 t.Fatal(err) 138 case <-ticker.C: 139 } 140 } 141 }