From 6d162bc1ce6f6519c8d71ba703addc87e0e86b77 Mon Sep 17 00:00:00 2001 From: Tim Scheuermann Date: Thu, 27 Oct 2022 10:02:30 +0200 Subject: [PATCH] Fixed job.IsValid and added tests (#21501) --- model/job.go | 13 ++--- model/job_test.go | 123 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+), 6 deletions(-) create mode 100644 model/job_test.go diff --git a/model/job.go b/model/job.go index 9b03430718..c63d260d85 100644 --- a/model/job.go +++ b/model/job.go @@ -99,12 +99,13 @@ func (j *Job) IsValid() *AppError { } switch j.Status { - case JobStatusPending: - case JobStatusInProgress: - case JobStatusSuccess: - case JobStatusError: - case JobStatusCancelRequested: - case JobStatusCanceled: + case JobStatusPending, + JobStatusInProgress, + JobStatusSuccess, + JobStatusError, + JobStatusWarning, + JobStatusCancelRequested, + JobStatusCanceled: default: return NewAppError("Job.IsValid", "model.job.is_valid.status.app_error", nil, "id="+j.Id, http.StatusBadRequest) } diff --git a/model/job_test.go b/model/job_test.go new file mode 100644 index 0000000000..360b533088 --- /dev/null +++ b/model/job_test.go @@ -0,0 +1,123 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +package model + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestJobAuditable(t *testing.T) { + job := &Job{ + Id: "arandomstring0123456789012", + Type: JobTypeExportProcess, + Priority: 42, + CreateAt: 1336, + StartAt: 1337, + LastActivityAt: 1666609360813, + Status: JobStatusInProgress, + Progress: 32, + Data: StringMap{"Hello": "World"}, + } + + audit := job.Auditable() + + require.Equal(t, job.Id, audit["id"]) + require.Equal(t, job.Type, audit["type"]) + require.Equal(t, job.Priority, audit["priority"]) + require.Equal(t, job.CreateAt, audit["create_at"]) + require.Equal(t, job.StartAt, audit["start_at"]) + require.Equal(t, job.LastActivityAt, audit["last_activity_at"]) + require.Equal(t, job.Status, audit["status"]) + require.Equal(t, job.Progress, audit["progress"]) + require.Equal(t, job.Data, audit["data"]) +} + +func TestJobIsValid(t *testing.T) { + t.Run("valid", func(t *testing.T) { + job := &Job{ + Id: "arandomstring0123456789012", + Type: JobTypeExportProcess, + Priority: 42, + CreateAt: 1336, + StartAt: 1337, + LastActivityAt: 1666609360813, + Status: JobStatusInProgress, + Progress: 32, + Data: StringMap{"Hello": "World"}, + } + + require.Nil(t, job.IsValid()) + }) + + t.Run("invalid ID", func(t *testing.T) { + job := &Job{ + Id: "invalid!", + Type: JobTypeExportProcess, + Priority: 42, + CreateAt: 1336, + StartAt: 1337, + LastActivityAt: 1666609360813, + Status: JobStatusInProgress, + Progress: 32, + Data: StringMap{"Hello": "World"}, + } + + require.NotNil(t, job.IsValid()) + }) + + t.Run("invalid creation time", func(t *testing.T) { + job := &Job{ + Id: "arandomstring0123456789012", + Type: JobTypeExportProcess, + Priority: 42, + CreateAt: 0, + StartAt: 1337, + LastActivityAt: 1666609360813, + Status: JobStatusInProgress, + Progress: 32, + Data: StringMap{"Hello": "World"}, + } + + require.NotNil(t, job.IsValid()) + }) + + t.Run("invalid status", func(t *testing.T) { + job := &Job{ + Id: "arandomstring0123456789012", + Type: JobTypeExportProcess, + Priority: 42, + CreateAt: 1336, + StartAt: 1337, + LastActivityAt: 1666609360813, + Status: "doing the best it can", + Progress: 32, + Data: StringMap{"Hello": "World"}, + } + + require.NotNil(t, job.IsValid()) + }) + + t.Run("valid status", func(t *testing.T) { + validStatuses := []string{JobStatusCancelRequested, JobStatusCanceled, JobStatusError, JobStatusInProgress, JobStatusPending, JobStatusSuccess, JobStatusWarning} + for _, status := range validStatuses { + t.Run(status, func(t *testing.T) { + job := &Job{ + Id: "arandomstring0123456789012", + Type: JobTypeExportProcess, + Priority: 42, + CreateAt: 1336, + StartAt: 1337, + LastActivityAt: 1666609360813, + Status: status, + Progress: 32, + Data: StringMap{"Hello": "World"}, + } + + require.Nil(t, job.IsValid()) + }) + } + }) +}