func TestDefaultStoreView(t *testing.T) { st, err := testStorage.DefaultStoreView() assert.NoError(t, err) assert.EqualValues(t, "at", st.Data.Code.String) var tst = store.MustNewStorage( store.SetStorageWebsites( &store.TableWebsite{WebsiteID: 21, Code: dbr.NewNullString("oz"), Name: dbr.NewNullString("OZ"), SortOrder: 20, DefaultGroupID: 3, IsDefault: dbr.NewNullBool(false)}, ), store.SetStorageGroups( &store.TableGroup{GroupID: 3, WebsiteID: 2, Name: "Australia", RootCategoryID: 2, DefaultStoreID: 5}, ), store.SetStorageStores( &store.TableStore{StoreID: 4, Code: dbr.NewNullString("au"), WebsiteID: 2, GroupID: 3, Name: "Australia", SortOrder: 10, IsActive: true}, &store.TableStore{StoreID: 6, Code: dbr.NewNullString("nz"), WebsiteID: 2, GroupID: 3, Name: "Kiwi", SortOrder: 30, IsActive: true}, ), ) dSt, err := tst.DefaultStoreView() assert.Nil(t, dSt) assert.EqualError(t, store.ErrStoreNotFound, err.Error()) var tst2 = store.MustNewStorage( store.SetStorageWebsites( &store.TableWebsite{WebsiteID: 21, Code: dbr.NewNullString("oz"), Name: dbr.NewNullString("OZ"), SortOrder: 20, DefaultGroupID: 3, IsDefault: dbr.NewNullBool(true)}, ), store.SetStorageGroups( &store.TableGroup{GroupID: 33, WebsiteID: 2, Name: "Australia", RootCategoryID: 2, DefaultStoreID: 5}, ), store.SetStorageStores(), ) dSt2, err := tst2.DefaultStoreView() assert.Nil(t, dSt2) assert.EqualError(t, store.ErrIDNotFoundTableGroupSlice, err.Error()) }
func TestStorageReInit(t *testing.T) { // quick implement, use mock of dbr.SessionRunner and remove connection dbc := csdb.MustConnectTest() defer func() { assert.NoError(t, dbc.Close()) }() nsg := store.MustNewStorage(nil, nil, nil) assert.NoError(t, nsg.ReInit(dbc.NewSession())) stores, err := nsg.Stores() assert.NoError(t, err) assert.True(t, stores.Len() > 0, "Expecting at least one store loaded from DB") for _, s := range stores { assert.NotEmpty(t, s.Data.Code.String, "Store: %#v", s.Data) } groups, err := nsg.Groups() assert.True(t, groups.Len() > 0, "Expecting at least one group loaded from DB") assert.NoError(t, err) for _, g := range groups { assert.NotEmpty(t, g.Data.Name, "Group: %#v", g.Data) } websites, err := nsg.Websites() assert.True(t, websites.Len() > 0, "Expecting at least one website loaded from DB") assert.NoError(t, err) for _, w := range websites { assert.NotEmpty(t, w.Data.Code.String, "Website: %#v", w.Data) } }
func getInitializedStoreService(so scope.Option) *store.Service { return store.MustNewService(so, store.MustNewStorage( store.SetStorageWebsites( &store.TableWebsite{WebsiteID: 0, Code: dbr.NewNullString("admin"), Name: dbr.NewNullString("Admin"), SortOrder: 0, DefaultGroupID: 0, IsDefault: dbr.NewNullBool(false)}, &store.TableWebsite{WebsiteID: 1, Code: dbr.NewNullString("euro"), Name: dbr.NewNullString("Europe"), SortOrder: 0, DefaultGroupID: 1, IsDefault: dbr.NewNullBool(true)}, &store.TableWebsite{WebsiteID: 2, Code: dbr.NewNullString("oz"), Name: dbr.NewNullString("OZ"), SortOrder: 20, DefaultGroupID: 3, IsDefault: dbr.NewNullBool(false)}, ), store.SetStorageGroups( &store.TableGroup{GroupID: 3, WebsiteID: 2, Name: "Australia", RootCategoryID: 2, DefaultStoreID: 5}, &store.TableGroup{GroupID: 1, WebsiteID: 1, Name: "DACH Group", RootCategoryID: 2, DefaultStoreID: 2}, &store.TableGroup{GroupID: 0, WebsiteID: 0, Name: "Default", RootCategoryID: 0, DefaultStoreID: 0}, &store.TableGroup{GroupID: 2, WebsiteID: 1, Name: "UK Group", RootCategoryID: 2, DefaultStoreID: 4}, ), store.SetStorageStores( &store.TableStore{StoreID: 0, Code: dbr.NewNullString("admin"), WebsiteID: 0, GroupID: 0, Name: "Admin", SortOrder: 0, IsActive: true}, &store.TableStore{StoreID: 5, Code: dbr.NewNullString("au"), WebsiteID: 2, GroupID: 3, Name: "Australia", SortOrder: 10, IsActive: true}, &store.TableStore{StoreID: 1, Code: dbr.NewNullString("de"), WebsiteID: 1, GroupID: 1, Name: "Germany", SortOrder: 10, IsActive: true}, &store.TableStore{StoreID: 4, Code: dbr.NewNullString("uk"), WebsiteID: 1, GroupID: 2, Name: "UK", SortOrder: 10, IsActive: true}, &store.TableStore{StoreID: 2, Code: dbr.NewNullString("at"), WebsiteID: 1, GroupID: 1, Name: "Österreich", SortOrder: 20, IsActive: true}, &store.TableStore{StoreID: 6, Code: dbr.NewNullString("nz"), WebsiteID: 2, GroupID: 3, Name: "Kiwi", SortOrder: 30, IsActive: true}, &store.TableStore{IsActive: false, StoreID: 3, Code: dbr.NewNullString("ch"), WebsiteID: 1, GroupID: 1, Name: "Schweiz", SortOrder: 30}, ), ), ) }
func TestStorageStoreErrors(t *testing.T) { var nsw = store.MustNewStorage( store.SetStorageWebsites(), store.SetStorageGroups(), store.SetStorageStores( &store.TableStore{StoreID: 4, Code: dbr.NewNullString("au"), WebsiteID: 2, GroupID: 3, Name: "Australia", SortOrder: 10, IsActive: true}, &store.TableStore{StoreID: 6, Code: dbr.NewNullString("nz"), WebsiteID: 2, GroupID: 3, Name: "Kiwi", SortOrder: 30, IsActive: true}, ), ) stw, err := nsw.Store(scope.MockCode("nz")) assert.Nil(t, stw) assert.EqualError(t, store.ErrIDNotFoundTableWebsiteSlice, err.Error()) stws, err := nsw.Stores() assert.Nil(t, stws) assert.EqualError(t, store.ErrIDNotFoundTableWebsiteSlice, err.Error()) var nsg = store.MustNewStorage( store.SetStorageWebsites( &store.TableWebsite{WebsiteID: 2, Code: dbr.NewNullString("oz"), Name: dbr.NewNullString("OZ"), SortOrder: 20, DefaultGroupID: 3, IsDefault: dbr.NewNullBool(false)}, ), store.SetStorageGroups( &store.TableGroup{GroupID: 13, WebsiteID: 12, Name: "Australia", RootCategoryID: 2, DefaultStoreID: 4}, ), store.SetStorageStores( &store.TableStore{StoreID: 4, Code: dbr.NewNullString("au"), WebsiteID: 2, GroupID: 3, Name: "Australia", SortOrder: 10, IsActive: true}, &store.TableStore{StoreID: 6, Code: dbr.NewNullString("nz"), WebsiteID: 2, GroupID: 3, Name: "Kiwi", SortOrder: 30, IsActive: true}, ), ) stg, err := nsg.Store(scope.MockCode("nz")) assert.Nil(t, stg) assert.EqualError(t, store.ErrIDNotFoundTableGroupSlice, err.Error()) stgs, err := nsg.Stores() assert.Nil(t, stgs) assert.EqualError(t, store.ErrIDNotFoundTableGroupSlice, err.Error()) }
func TestNewServiceReInit(t *testing.T) { t.Skip(TODO_Better_Test_Data) // quick implement, use mock of dbr.SessionRunner and remove connection dbc := csdb.MustConnectTest() defer func() { assert.NoError(t, dbc.Close()) }() dbrSess := dbc.NewSession() storeService := store.MustNewService(scope.Option{}, store.MustNewStorage(nil /* trick it*/)) if err := storeService.ReInit(dbrSess); err != nil { t.Fatal(err) } tests := []struct { have scope.StoreIDer wantErr error }{ {scope.MockCode("dede"), nil}, {scope.MockCode("czcz"), store.ErrIDNotFoundTableStoreSlice}, {scope.MockID(1), nil}, {scope.MockID(100), store.ErrStoreNotFound}, {mockIDCode{1, "dede"}, nil}, {mockIDCode{2, "czfr"}, store.ErrStoreNotFound}, {mockIDCode{2, ""}, nil}, } for _, test := range tests { s, err := storeService.Store(test.have) if test.wantErr == nil { assert.NoError(t, err, "No Err; for test: %#v", test) assert.NotNil(t, s) // assert.NotEmpty(t, s.Data.Code.String, "%#v", s.Data) } else { assert.Error(t, err, "Err for test: %#v", test) assert.EqualError(t, test.wantErr, err.Error(), "EqualErr for test: %#v", test) assert.Nil(t, s) } } assert.False(t, storeService.IsCacheEmpty()) storeService.ClearCache() assert.True(t, storeService.IsCacheEmpty()) }
func TestStorageGroupNoWebsite(t *testing.T) { var tst = store.MustNewStorage( store.SetStorageWebsites( &store.TableWebsite{WebsiteID: 21, Code: dbr.NewNullString("oz"), Name: dbr.NewNullString("OZ"), SortOrder: 20, DefaultGroupID: 3, IsDefault: dbr.NewNullBool(false)}, ), store.SetStorageGroups( &store.TableGroup{GroupID: 3, WebsiteID: 2, Name: "Australia", RootCategoryID: 2, DefaultStoreID: 5}, ), store.SetStorageStores( &store.TableStore{StoreID: 5, Code: dbr.NewNullString("au"), WebsiteID: 2, GroupID: 3, Name: "Australia", SortOrder: 10, IsActive: true}, &store.TableStore{StoreID: 6, Code: dbr.NewNullString("nz"), WebsiteID: 2, GroupID: 3, Name: "Kiwi", SortOrder: 30, IsActive: true}, ), ) g, err := tst.Group(scope.MockID(3)) assert.Nil(t, g) assert.EqualError(t, store.ErrIDNotFoundTableWebsiteSlice, err.Error()) gs, err := tst.Groups() assert.Nil(t, gs) assert.EqualError(t, store.ErrIDNotFoundTableWebsiteSlice, err.Error()) }
func initStore() { store.PkgLog = log.NewStdLogger( log.SetStdDebug(&testDebugLogBuf, "testErr: ", std.Lshortfile), ) store.PkgLog.SetLevel(log.StdLevelDebug) testStoreService = store.MustNewService( scope.Option{ Website: scope.MockID(1), // bound to website ID 1 = Europe }, store.MustNewStorage( // Storage gets usually loaded from the database tables containing // website, group and store. For the sake of this example the storage // is hard coded. store.SetStorageWebsites( &store.TableWebsite{WebsiteID: 0, Code: dbr.NewNullString("admin"), Name: dbr.NewNullString("Admin"), SortOrder: 0, DefaultGroupID: 0, IsDefault: dbr.NewNullBool(false)}, &store.TableWebsite{WebsiteID: 1, Code: dbr.NewNullString("euro"), Name: dbr.NewNullString("Europe"), SortOrder: 0, DefaultGroupID: 1, IsDefault: dbr.NewNullBool(true)}, &store.TableWebsite{WebsiteID: 2, Code: dbr.NewNullString("oz"), Name: dbr.NewNullString("OZ"), SortOrder: 20, DefaultGroupID: 3, IsDefault: dbr.NewNullBool(false)}, ), store.SetStorageGroups( &store.TableGroup{GroupID: 3, WebsiteID: 2, Name: "Australia", RootCategoryID: 2, DefaultStoreID: 5}, &store.TableGroup{GroupID: 1, WebsiteID: 1, Name: "DACH Group", RootCategoryID: 2, DefaultStoreID: 2}, &store.TableGroup{GroupID: 0, WebsiteID: 0, Name: "Default", RootCategoryID: 0, DefaultStoreID: 0}, &store.TableGroup{GroupID: 2, WebsiteID: 1, Name: "UK Group", RootCategoryID: 2, DefaultStoreID: 4}, ), store.SetStorageStores( &store.TableStore{StoreID: 0, Code: dbr.NewNullString("admin"), WebsiteID: 0, GroupID: 0, Name: "Admin", SortOrder: 0, IsActive: true}, &store.TableStore{StoreID: 5, Code: dbr.NewNullString("au"), WebsiteID: 2, GroupID: 3, Name: "Australia", SortOrder: 10, IsActive: true}, &store.TableStore{StoreID: 1, Code: dbr.NewNullString("de"), WebsiteID: 1, GroupID: 1, Name: "Germany", SortOrder: 10, IsActive: true}, &store.TableStore{StoreID: 4, Code: dbr.NewNullString("uk"), WebsiteID: 1, GroupID: 2, Name: "UK", SortOrder: 10, IsActive: true}, &store.TableStore{StoreID: 2, Code: dbr.NewNullString("at"), WebsiteID: 1, GroupID: 1, Name: "Österreich", SortOrder: 20, IsActive: true}, &store.TableStore{StoreID: 6, Code: dbr.NewNullString("nz"), WebsiteID: 2, GroupID: 3, Name: "Kiwi", SortOrder: 30, IsActive: true}, &store.TableStore{IsActive: false, StoreID: 3, Code: dbr.NewNullString("ch"), WebsiteID: 1, GroupID: 1, Name: "Schweiz", SortOrder: 30}, ), ), ) }
func main() { a := newApp() defer a.close() // @todo check signal and close gracefully ctx := store.WithContextMustService( scope.Option{Website: scope.MockID(1)}, // run website ID 1, see database table, like Mage::run('code','store') store.MustNewStorage(store.WithDatabaseInit(a.dbc.NewSession())), ) ctx = config.WithContextGetter(ctx, a.config) router := ctxrouter.New(ctx) a.routeLogin(router) a.setupStoreRoutes(router) router.Handle("GET", "/error", func(ctx context.Context, w http.ResponseWriter, r *http.Request) error { return store.ErrContextServiceNotFound }) println("Starting server @ ", ServerAddress) log.Fatal("ListenAndServe", "err", http.ListenAndServe(ServerAddress, router)) }