gitea源码

timetracking_test.go 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package integration
  4. import (
  5. "net/http"
  6. "path"
  7. "testing"
  8. "time"
  9. "code.gitea.io/gitea/tests"
  10. "github.com/stretchr/testify/assert"
  11. )
  12. func TestViewTimetrackingControls(t *testing.T) {
  13. defer tests.PrepareTestEnv(t)()
  14. t.Run("Exist", func(t *testing.T) {
  15. defer tests.PrintCurrentTest(t)()
  16. session := loginUser(t, "user2")
  17. testViewTimetrackingControls(t, session, "user2", "repo1", "1", true)
  18. })
  19. t.Run("Non-exist", func(t *testing.T) {
  20. defer tests.PrintCurrentTest(t)()
  21. session := loginUser(t, "user5")
  22. testViewTimetrackingControls(t, session, "user2", "repo1", "1", false)
  23. })
  24. t.Run("Disabled", func(t *testing.T) {
  25. defer tests.PrintCurrentTest(t)()
  26. session := loginUser(t, "user2")
  27. testViewTimetrackingControls(t, session, "org3", "repo3", "1", false)
  28. })
  29. }
  30. func testViewTimetrackingControls(t *testing.T, session *TestSession, user, repo, issue string, canTrackTime bool) {
  31. req := NewRequest(t, "GET", path.Join(user, repo, "issues", issue))
  32. resp := session.MakeRequest(t, req, http.StatusOK)
  33. htmlDoc := NewHTMLParser(t, resp.Body)
  34. AssertHTMLElement(t, htmlDoc, ".issue-start-time", canTrackTime)
  35. AssertHTMLElement(t, htmlDoc, ".issue-add-time", canTrackTime)
  36. issueLink := path.Join(user, repo, "issues", issue)
  37. reqStart := NewRequestWithValues(t, "POST", path.Join(issueLink, "times", "stopwatch", "start"), map[string]string{
  38. "_csrf": htmlDoc.GetCSRF(),
  39. })
  40. if canTrackTime {
  41. session.MakeRequest(t, reqStart, http.StatusOK)
  42. req = NewRequest(t, "GET", issueLink)
  43. resp = session.MakeRequest(t, req, http.StatusOK)
  44. htmlDoc = NewHTMLParser(t, resp.Body)
  45. events := htmlDoc.doc.Find(".event > .comment-text-line")
  46. assert.Contains(t, events.Last().Text(), "started working")
  47. AssertHTMLElement(t, htmlDoc, ".issue-stop-time", true)
  48. AssertHTMLElement(t, htmlDoc, ".issue-cancel-time", true)
  49. // Sleep for 1 second to not get wrong order for stopping timer
  50. time.Sleep(time.Second)
  51. reqStop := NewRequestWithValues(t, "POST", path.Join(issueLink, "times", "stopwatch", "stop"), map[string]string{
  52. "_csrf": htmlDoc.GetCSRF(),
  53. })
  54. session.MakeRequest(t, reqStop, http.StatusOK)
  55. req = NewRequest(t, "GET", issueLink)
  56. resp = session.MakeRequest(t, req, http.StatusOK)
  57. htmlDoc = NewHTMLParser(t, resp.Body)
  58. events = htmlDoc.doc.Find(".event > .comment-text-line")
  59. assert.Contains(t, events.Last().Text(), "worked for ")
  60. } else {
  61. session.MakeRequest(t, reqStart, http.StatusNotFound)
  62. }
  63. }