imports_printer_test.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package leaves
  2. import (
  3. "bytes"
  4. "testing"
  5. "time"
  6. imports2 "github.com/src-d/imports"
  7. "github.com/stretchr/testify/assert"
  8. gitplumbing "gopkg.in/src-d/go-git.v4/plumbing"
  9. "gopkg.in/src-d/hercules.v10/internal/core"
  10. "gopkg.in/src-d/hercules.v10/internal/plumbing"
  11. "gopkg.in/src-d/hercules.v10/internal/plumbing/identity"
  12. "gopkg.in/src-d/hercules.v10/internal/plumbing/imports"
  13. "gopkg.in/src-d/hercules.v10/internal/test"
  14. )
  15. func fixtureImportsPerDev() *ImportsPerDeveloper {
  16. d := ImportsPerDeveloper{}
  17. d.Initialize(test.Repository)
  18. people := [...]string{"one@srcd", "two@srcd"}
  19. d.reversedPeopleDict = people[:]
  20. return &d
  21. }
  22. func TestImportsPerDeveloperMeta(t *testing.T) {
  23. ipd := fixtureImportsPerDev()
  24. ass := assert.New(t)
  25. ass.Equal(ipd.Name(), "ImportsPerDeveloper")
  26. ass.Equal(len(ipd.Provides()), 0)
  27. ass.Equal(len(ipd.Requires()), 3)
  28. ass.Equal(ipd.Requires()[0], imports.DependencyImports)
  29. ass.Equal(ipd.Requires()[1], identity.DependencyAuthor)
  30. ass.Equal(ipd.Requires()[2], plumbing.DependencyTick)
  31. ass.Equal(ipd.Flag(), "imports-per-dev")
  32. assert.Len(t, ipd.ListConfigurationOptions(), 0)
  33. assert.True(t, len(ipd.Description()) > 0)
  34. logger := core.NewLogger()
  35. assert.NoError(t, ipd.Configure(map[string]interface{}{
  36. core.ConfigLogger: logger,
  37. identity.FactIdentityDetectorReversedPeopleDict: []string{"1", "2"},
  38. plumbing.FactTickSize: time.Hour,
  39. }))
  40. ass.Equal(logger, ipd.l)
  41. ass.Equal([]string{"1", "2"}, ipd.reversedPeopleDict)
  42. ass.Equal(time.Hour, ipd.TickSize)
  43. }
  44. func TestImportsPerDeveloperRegistration(t *testing.T) {
  45. summoned := core.Registry.Summon((&ImportsPerDeveloper{}).Name())
  46. assert.Len(t, summoned, 1)
  47. assert.Equal(t, summoned[0].Name(), "ImportsPerDeveloper")
  48. leaves := core.Registry.GetLeaves()
  49. matched := false
  50. for _, tp := range leaves {
  51. if tp.Flag() == (&ImportsPerDeveloper{}).Flag() {
  52. matched = true
  53. break
  54. }
  55. }
  56. assert.True(t, matched)
  57. }
  58. func TestImportsPerDeveloperInitialize(t *testing.T) {
  59. ipd := fixtureImportsPerDev()
  60. assert.NotNil(t, ipd.imports)
  61. assert.Equal(t, time.Hour*24, ipd.TickSize)
  62. }
  63. func TestImportsPerDeveloperConsumeFinalize(t *testing.T) {
  64. deps := map[string]interface{}{}
  65. deps[core.DependencyIsMerge] = false
  66. deps[identity.DependencyAuthor] = 0
  67. deps[plumbing.DependencyTick] = 1
  68. imps := map[gitplumbing.Hash]imports2.File{}
  69. imps[gitplumbing.NewHash("291286b4ac41952cbd1389fda66420ec03c1a9fe")] =
  70. imports2.File{Lang: "Go", Path: "test.go", Imports: []string{"sys"}}
  71. imps[gitplumbing.NewHash("c29112dbd697ad9b401333b80c18a63951bc18d9")] =
  72. imports2.File{Lang: "Python", Path: "test.py", Imports: []string{"sys"}}
  73. deps[imports.DependencyImports] = imps
  74. ipd := fixtureImportsPerDev()
  75. ipd.reversedPeopleDict = []string{"1", "2"}
  76. _, err := ipd.Consume(deps)
  77. assert.NoError(t, err)
  78. assert.Equal(t, ImportsMap{
  79. 0: {"Go": {"sys": {1: 1}}, "Python": {"sys": {1: 1}}},
  80. }, ipd.imports)
  81. _, err = ipd.Consume(deps)
  82. assert.NoError(t, err)
  83. assert.Equal(t, ImportsMap{
  84. 0: {"Go": {"sys": {1: 2}}, "Python": {"sys": {1: 2}}},
  85. }, ipd.imports)
  86. deps[identity.DependencyAuthor] = 1
  87. _, err = ipd.Consume(deps)
  88. assert.NoError(t, err)
  89. assert.Equal(t, ImportsMap{
  90. 0: {"Go": {"sys": {1: 2}}, "Python": {"sys": {1: 2}}},
  91. 1: {"Go": {"sys": {1: 1}}, "Python": {"sys": {1: 1}}},
  92. }, ipd.imports)
  93. deps[core.DependencyIsMerge] = true
  94. _, err = ipd.Consume(deps)
  95. assert.NoError(t, err)
  96. assert.Equal(t, ImportsMap{
  97. 0: {"Go": {"sys": {1: 2}}, "Python": {"sys": {1: 2}}},
  98. 1: {"Go": {"sys": {1: 1}}, "Python": {"sys": {1: 1}}},
  99. }, ipd.imports)
  100. result := ipd.Finalize().(ImportsPerDeveloperResult)
  101. assert.Equal(t, ipd.reversedPeopleDict, result.reversedPeopleDict)
  102. assert.Equal(t, ipd.imports, result.Imports)
  103. }
  104. func TestImportsPerDeveloperSerializeText(t *testing.T) {
  105. ipd := fixtureImportsPerDev()
  106. res := ImportsPerDeveloperResult{Imports: ImportsMap{
  107. 0: {"Go": {"sys": {1: 2}}, "Python": {"sys": {1: 2}}},
  108. 1: {"Go": {"sys": {1: 1}}, "Python": {"sys": {1: 1}}},
  109. }, reversedPeopleDict: []string{"one", "two"}}
  110. buffer := &bytes.Buffer{}
  111. assert.NoError(t, ipd.Serialize(res, false, buffer))
  112. assert.Equal(t, ` tick_size: 0
  113. imports:
  114. "one": {"Go":{"sys":{"1":2}},"Python":{"sys":{"1":2}}}
  115. "two": {"Go":{"sys":{"1":1}},"Python":{"sys":{"1":1}}}
  116. `, buffer.String())
  117. }
  118. func TestImportsPerDeveloperSerializeBinary(t *testing.T) {
  119. ipd := fixtureImportsPerDev()
  120. ass := assert.New(t)
  121. res := ImportsPerDeveloperResult{Imports: ImportsMap{
  122. 0: {"Go": {"sys": {1: 2}}, "Python": {"sys": {1: 2}}},
  123. 1: {"Go": {"sys": {1: 1}}, "Python": {"sys": {1: 1}}},
  124. }, reversedPeopleDict: []string{"one", "two"}}
  125. buffer := &bytes.Buffer{}
  126. ass.NoError(ipd.Serialize(res, true, buffer))
  127. back, err := ipd.Deserialize(buffer.Bytes())
  128. ass.NoError(err)
  129. ass.Equal(res, back)
  130. }