| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- // Copyright 2025 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package integration_test
-
- import (
- "testing"
-
- "code.gitea.io/gitea/models/organization"
- "code.gitea.io/gitea/models/unittest"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- )
-
- // TestTimesByRepos tests TimesByRepos functionality
- func testTimesByRepos(t *testing.T) {
- kases := []struct {
- name string
- unixfrom int64
- unixto int64
- orgname int64
- expected []organization.WorktimeSumByRepos
- }{
- {
- name: "Full sum for org 1",
- unixfrom: 0,
- unixto: 9223372036854775807,
- orgname: 1,
- expected: []organization.WorktimeSumByRepos(nil),
- },
- {
- name: "Full sum for org 2",
- unixfrom: 0,
- unixto: 9223372036854775807,
- orgname: 2,
- expected: []organization.WorktimeSumByRepos{
- {
- RepoName: "repo1",
- SumTime: 4083,
- },
- {
- RepoName: "repo2",
- SumTime: 75,
- },
- },
- },
- {
- name: "Simple time bound",
- unixfrom: 946684801,
- unixto: 946684802,
- orgname: 2,
- expected: []organization.WorktimeSumByRepos{
- {
- RepoName: "repo1",
- SumTime: 3662,
- },
- },
- },
- {
- name: "Both times inclusive",
- unixfrom: 946684801,
- unixto: 946684801,
- orgname: 2,
- expected: []organization.WorktimeSumByRepos{
- {
- RepoName: "repo1",
- SumTime: 3661,
- },
- },
- },
- {
- name: "Should ignore deleted",
- unixfrom: 947688814,
- unixto: 947688815,
- orgname: 2,
- expected: []organization.WorktimeSumByRepos{
- {
- RepoName: "repo2",
- SumTime: 71,
- },
- },
- },
- }
-
- // Run test kases
- for _, kase := range kases {
- t.Run(kase.name, func(t *testing.T) {
- org, err := organization.GetOrgByID(t.Context(), kase.orgname)
- assert.NoError(t, err)
- results, err := organization.GetWorktimeByRepos(t.Context(), org, kase.unixfrom, kase.unixto)
- assert.NoError(t, err)
- assert.Equal(t, kase.expected, results)
- })
- }
- }
-
- // TestTimesByMilestones tests TimesByMilestones functionality
- func testTimesByMilestones(t *testing.T) {
- kases := []struct {
- name string
- unixfrom int64
- unixto int64
- orgname int64
- expected []organization.WorktimeSumByMilestones
- }{
- {
- name: "Full sum for org 1",
- unixfrom: 0,
- unixto: 9223372036854775807,
- orgname: 1,
- expected: []organization.WorktimeSumByMilestones(nil),
- },
- {
- name: "Full sum for org 2",
- unixfrom: 0,
- unixto: 9223372036854775807,
- orgname: 2,
- expected: []organization.WorktimeSumByMilestones{
- {
- RepoName: "repo1",
- MilestoneName: "",
- MilestoneID: 0,
- SumTime: 401,
- HideRepoName: false,
- },
- {
- RepoName: "repo1",
- MilestoneName: "milestone1",
- MilestoneID: 1,
- SumTime: 3682,
- HideRepoName: true,
- },
- {
- RepoName: "repo2",
- MilestoneName: "",
- MilestoneID: 0,
- SumTime: 75,
- HideRepoName: false,
- },
- },
- },
- {
- name: "Simple time bound",
- unixfrom: 946684801,
- unixto: 946684802,
- orgname: 2,
- expected: []organization.WorktimeSumByMilestones{
- {
- RepoName: "repo1",
- MilestoneName: "milestone1",
- MilestoneID: 1,
- SumTime: 3662,
- HideRepoName: false,
- },
- },
- },
- {
- name: "Both times inclusive",
- unixfrom: 946684801,
- unixto: 946684801,
- orgname: 2,
- expected: []organization.WorktimeSumByMilestones{
- {
- RepoName: "repo1",
- MilestoneName: "milestone1",
- MilestoneID: 1,
- SumTime: 3661,
- HideRepoName: false,
- },
- },
- },
- {
- name: "Should ignore deleted",
- unixfrom: 947688814,
- unixto: 947688815,
- orgname: 2,
- expected: []organization.WorktimeSumByMilestones{
- {
- RepoName: "repo2",
- MilestoneName: "",
- MilestoneID: 0,
- SumTime: 71,
- HideRepoName: false,
- },
- },
- },
- }
-
- // Run test kases
- for _, kase := range kases {
- t.Run(kase.name, func(t *testing.T) {
- org, err := organization.GetOrgByID(t.Context(), kase.orgname)
- require.NoError(t, err)
- results, err := organization.GetWorktimeByMilestones(t.Context(), org, kase.unixfrom, kase.unixto)
- if assert.NoError(t, err) {
- assert.Equal(t, kase.expected, results)
- }
- })
- }
- }
-
- // TestTimesByMembers tests TimesByMembers functionality
- func testTimesByMembers(t *testing.T) {
- kases := []struct {
- name string
- unixfrom int64
- unixto int64
- orgname int64
- expected []organization.WorktimeSumByMembers
- }{
- {
- name: "Full sum for org 1",
- unixfrom: 0,
- unixto: 9223372036854775807,
- orgname: 1,
- expected: []organization.WorktimeSumByMembers(nil),
- },
- {
- // Test case: Sum of times forever in org no. 2
- name: "Full sum for org 2",
- unixfrom: 0,
- unixto: 9223372036854775807,
- orgname: 2,
- expected: []organization.WorktimeSumByMembers{
- {
- UserName: "user2",
- SumTime: 3666,
- },
- {
- UserName: "user1",
- SumTime: 491,
- },
- },
- },
- {
- name: "Simple time bound",
- unixfrom: 946684801,
- unixto: 946684802,
- orgname: 2,
- expected: []organization.WorktimeSumByMembers{
- {
- UserName: "user2",
- SumTime: 3662,
- },
- },
- },
- {
- name: "Both times inclusive",
- unixfrom: 946684801,
- unixto: 946684801,
- orgname: 2,
- expected: []organization.WorktimeSumByMembers{
- {
- UserName: "user2",
- SumTime: 3661,
- },
- },
- },
- {
- name: "Should ignore deleted",
- unixfrom: 947688814,
- unixto: 947688815,
- orgname: 2,
- expected: []organization.WorktimeSumByMembers{
- {
- UserName: "user1",
- SumTime: 71,
- },
- },
- },
- }
-
- // Run test kases
- for _, kase := range kases {
- t.Run(kase.name, func(t *testing.T) {
- org, err := organization.GetOrgByID(t.Context(), kase.orgname)
- assert.NoError(t, err)
- results, err := organization.GetWorktimeByMembers(t.Context(), org, kase.unixfrom, kase.unixto)
- assert.NoError(t, err)
- assert.Equal(t, kase.expected, results)
- })
- }
- }
-
- func TestOrgWorktime(t *testing.T) {
- // we need to run these tests in integration test because there are complex SQL queries
- assert.NoError(t, unittest.PrepareTestDatabase())
- t.Run("ByRepos", testTimesByRepos)
- t.Run("ByMilestones", testTimesByMilestones)
- t.Run("ByMembers", testTimesByMembers)
- }
|