func init() { UI = &cli.BasicUi{Writer: os.Stdout, Reader: os.Stdin} user, err := user.Current() if err != nil { UI.Error(err.Error()) os.Exit(1) } configPath := path.Join(user.HomeDir, command.ConfigFileName) c, err := command.ParseConfigFile(configPath) if err != nil { UI.Error(err.Error()) os.Exit(1) } Configuration = c var db olddata.DB var databaseError error if Configuration.DirectDB { if Configuration.DB != "" { db, databaseError = models.MongoDB(Configuration.DB) } else { databaseError = fmt.Errorf("No database listed") } } else { db = &gaia.DB{ URL: Configuration.Host, Username: Configuration.PublicCredential, Password: Configuration.PrivateCredential, Client: new(http.Client), } } conn, err := grpc.Dial( "elos.pw:4444", grpc.WithPerRPCCredentials( auth.RawCredentials( Configuration.Credential.Public, Configuration.Credential.Private, ), ), grpc.WithInsecure(), ) if err != nil { log.Fatal(err) } // don't close connection because we'd lose connection should // move declaration of dbc higher in scope TODO(nclandolfi) dbc := data.NewDBClient(conn) Commands = map[string]cli.CommandFactory{ "habit": func() (cli.Command, error) { return &command.HabitCommand{ UI: UI, UserID: Configuration.UserID, DB: db, }, databaseError }, "people": func() (cli.Command, error) { return &command.PeopleCommand{ UI: UI, UserID: Configuration.UserID, DB: db, }, databaseError }, "setup": func() (cli.Command, error) { return &command.SetupCommand{ UI: UI, Config: Configuration, }, nil }, "tag": func() (cli.Command, error) { return &command.TagCommand{ UI: UI, UserID: Configuration.UserID, DB: db, }, databaseError }, "stream": func() (cli.Command, error) { return &command.StreamCommand{ UI: UI, UserID: Configuration.UserID, DB: db, }, databaseError }, "todo": func() (cli.Command, error) { return &command.TodoCommand{ UI: UI, UserID: Configuration.Credential.OwnerID, DB: data.DB(dbc), }, databaseError }, "cal2": func() (cli.Command, error) { return &command.Cal2Command{ UI: UI, UserID: Configuration.Credential.OwnerID, DBClient: dbc, }, nil }, "records": func() (cli.Command, error) { return &command.RecordsCommand{ UI: UI, UserID: Configuration.Credential.OwnerID, DBClient: dbc, }, nil }, } }
func TestCal(t *testing.T) { //TODO(nclandolfi): fix test t.Skip() NOW := time.Now() cases := map[string]struct { prior data.State userID string args []string input io.Reader code int errput string output string // IF posterior is nil, prior will be used posterior data.State }{ "simple cal week": { prior: data.State{ models.Kind_USER: []*data.Record{ &data.Record{ Kind: models.Kind_USER, User: &models.User{ Id: "1", }, }, }, models.Kind_CREDENTIAL: []*data.Record{ &data.Record{ Kind: models.Kind_CREDENTIAL, Credential: &models.Credential{ Id: "2", OwnerId: "1", Type: models.Credential_PASSWORD, Public: "pu", Private: "pr", }, }, }, models.Kind_FIXTURE: []*data.Record{ &data.Record{ Kind: models.Kind_FIXTURE, Fixture: &models.Fixture{ Id: "3", OwnerId: "1", StartTime: models.TimestampFrom(NOW.Add(1 * time.Hour)), EndTime: models.TimestampFrom(NOW.Add(2 * time.Hour)), }, }, }, }, input: new(bytes.Buffer), userID: "1", args: []string{"week"}, }, } for n, c := range cases { t.Run(n, func(t *testing.T) { db := mem.NewDB() dbc, conn, err := data.DBBothLocal(db) if err != nil { t.Fatalf("data.DBBothLocal error: %v", err) } defer conn.Close() if err := data.Seed(context.Background(), dbc, c.prior); err != nil { t.Fatalf("data.Seed error: %v", err) } if c.input == nil { t.Fatal("c.input must be non-nil") } ui := &cli.MockUi{ InputReader: c.input, } cmd := &CalCommand{ UI: ui, UserID: c.userID, DB: data.DB(dbc), } if got, want := cmd.Run(c.args), c.code; got != want { t.Log(ui.ErrorWriter.String()) t.Fatalf("cmd.Run(%v): got %d, want %d", c.args, got, want) } if got, want := ui.ErrorWriter.String(), c.errput; got != want { t.Fatalf("ui.ErrorWriter.String(): got %q, want %q", got, want) } if got, want := ui.OutputWriter.String(), c.output; got != want { t.Fatalf("ui.OutputWriter.String(): got %q, want %q", got, want) } finalState := c.prior if c.posterior != nil { finalState = c.posterior } if got, want := data.CompareState(context.Background(), dbc, finalState), error(nil); got != want { t.Fatalf("data.CompareState: got %v, want %v", got, want) } }) } }