// Create runs the create action. func (c *SpaceIterationsController) Create(ctx *app.CreateSpaceIterationsContext) error { _, err := login.ContextIdentity(ctx) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrUnauthorized(err.Error())) } spaceID, err := uuid.FromString(ctx.ID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } // Validate Request if ctx.Payload.Data == nil { return jsonapi.JSONErrorResponse(ctx, errors.NewBadParameterError("data", nil).Expected("not nil")) } reqIter := ctx.Payload.Data if reqIter.Attributes.Name == nil { return jsonapi.JSONErrorResponse(ctx, errors.NewBadParameterError("data.attributes.name", nil).Expected("not nil")) } return application.Transactional(c.db, func(appl application.Application) error { _, err = appl.Spaces().Load(ctx, spaceID) if err != nil { return jsonapi.JSONErrorResponse(ctx, goa.ErrNotFound(err.Error())) } newItr := iteration.Iteration{ SpaceID: spaceID, Name: *reqIter.Attributes.Name, StartAt: reqIter.Attributes.StartAt, EndAt: reqIter.Attributes.EndAt, } if reqIter.Attributes.Description != nil { newItr.Description = reqIter.Attributes.Description } err = appl.Iterations().Create(ctx, &newItr) if err != nil { return jsonapi.JSONErrorResponse(ctx, err) } res := &app.IterationSingle{ Data: ConvertIteration(ctx.RequestData, &newItr), } ctx.ResponseData.Header().Set("Location", rest.AbsoluteURL(ctx.RequestData, app.IterationHref(res.Data.ID))) return ctx.Created(res) }) }
func (test *TestIterationRepository) TestUpdateIteration() { t := test.T() resource.Require(t, resource.Database) repo := iteration.NewIterationRepository(test.DB) start := time.Now() end := start.Add(time.Hour * (24 * 8 * 3)) name := "Sprint #24" i := iteration.Iteration{ Name: name, SpaceID: uuid.NewV4(), StartAt: &start, EndAt: &end, } // creates an iteration repo.Create(context.Background(), &i) require.NotEqual(t, uuid.Nil, i.ID, "Iteration was not created, ID nil") desc := "Updated item" i.Description = &desc updatedName := "Sprint 25" i.Name = updatedName // update iteration with new values of Name and Desc updatedIteration, err := repo.Save(context.Background(), i) require.Nil(t, err) assert.Equal(t, updatedIteration.Name, updatedName) assert.Equal(t, *updatedIteration.Description, desc) changedStart := start.Add(time.Hour) i.StartAt = &changedStart changedEnd := start.Add(time.Hour * 2) i.EndAt = &changedEnd // update iteration with new values of StartAt, EndAt updatedIteration, err = repo.Save(context.Background(), i) require.Nil(t, err) assert.Equal(t, changedStart, *updatedIteration.StartAt) assert.Equal(t, changedEnd, *updatedIteration.EndAt) }