/gorm_test.go

http://github.com/sdegutis/GoRM · Go · 196 lines · 154 code · 42 blank · 0 comment · 68 complexity · 341296e55bbe273a1854062d8ce705e2 MD5 · raw file

  1. package gorm
  2. import (
  3. "testing"
  4. "io/ioutil"
  5. "bytes"
  6. "reflect"
  7. )
  8. type Person struct {
  9. Id int
  10. Name string
  11. Age int
  12. }
  13. func TestOpenDB(t *testing.T) {
  14. db, err := OpenDB("test.db")
  15. if err != nil || db == nil {
  16. t.Errorf("opening db file should not have failed")
  17. }
  18. err = db.Close()
  19. if err != nil {
  20. t.Errorf("closing db connection should not have failed either")
  21. }
  22. }
  23. func TestGetSingle(t *testing.T) {
  24. db, _ := OpenDB("test.db")
  25. defer db.Close()
  26. var bob Person
  27. err := db.Get(&bob, "name = ?", "bob")
  28. if err != nil {
  29. t.Error(err)
  30. }
  31. if bob.Name != "bob" || bob.Age != 24 || bob.Id != 2 {
  32. t.Errorf("bob was not filled out properly [%v]", bob)
  33. }
  34. }
  35. func TestGetSingleById(t *testing.T) {
  36. db, _ := OpenDB("test.db")
  37. defer db.Close()
  38. var bob Person
  39. err := db.Get(&bob, 2)
  40. if err != nil {
  41. t.Error(err)
  42. }
  43. if bob.Name != "bob" || bob.Age != 24 || bob.Id != 2 {
  44. t.Errorf("bob was not filled out properly [%v]", bob)
  45. }
  46. }
  47. func copyTemp(t *testing.T, path string) string {
  48. data, err := ioutil.ReadFile(path)
  49. if err != nil {
  50. t.Errorf("could not read supposedly 'copyable' file")
  51. }
  52. f, err := ioutil.TempFile("", "gorm-sqlite-prefix")
  53. if err != nil {
  54. t.Errorf("could not create tempfile for writing")
  55. }
  56. f.Write(data)
  57. fname := f.Name()
  58. f.Close()
  59. return fname
  60. }
  61. func TestCopyTemp(t *testing.T) {
  62. name := "test.db"
  63. tmpName := copyTemp(t, name)
  64. if name == tmpName {
  65. t.Errorf("copyTemp should have given a filename other than %q", name)
  66. }
  67. data1, err1 := ioutil.ReadFile(name)
  68. data2, err2 := ioutil.ReadFile(tmpName)
  69. if err1 != nil || err2 != nil || bytes.Compare(data1, data2) != 0 {
  70. t.Errorf("copyTemp did not copy the file correctly.")
  71. }
  72. }
  73. func TestInsertViaSave(t *testing.T) {
  74. db, _ := OpenDB(copyTemp(t, "test.db"))
  75. defer db.Close()
  76. var james Person
  77. james.Name = "james"
  78. james.Age = 29
  79. err := db.Save(&james)
  80. if err != nil {
  81. t.Error(err)
  82. }
  83. if james.Id == 0 {
  84. t.Error("james should have a new Id, but doesnt. sigh.")
  85. }
  86. var people []Person
  87. db.GetAll(&people, "")
  88. if len(people) != 3 {
  89. t.Errorf("the db should contain 3 people now, but it contains %d", len(people))
  90. }
  91. found := false
  92. for i := 0; i < len(people); i++ {
  93. person := people[i]
  94. if person.Name == "james" && person.Age == 29 && person.Id == 3 {
  95. found = true
  96. }
  97. }
  98. if !found {
  99. t.Errorf("could not find james in the db. oh no hes lost!! quick call for help!")
  100. }
  101. }
  102. func TestSave(t *testing.T) {
  103. db, _ := OpenDB(copyTemp(t, "test.db"))
  104. defer db.Close()
  105. newName := "Fred Jones"
  106. var bob Person
  107. db.Get(&bob, 2)
  108. bob.Name = newName
  109. db.Save(&bob)
  110. var fred Person
  111. err := db.Get(&fred, 2)
  112. if err != nil {
  113. t.Error(err)
  114. }
  115. if fred.Name != newName {
  116. t.Errorf("name should have been %q, got %q instead", newName, fred.Name)
  117. }
  118. }
  119. func TestGetMultiple(t *testing.T) {
  120. db, _ := OpenDB("test.db")
  121. defer db.Close()
  122. var peoples []Person
  123. err := db.GetAll(&peoples, "")
  124. if err != nil {
  125. t.Error(err)
  126. }
  127. if len(peoples) != 2 {
  128. t.Errorf("wrong number of people returned, should be 2, but got %d", len(peoples))
  129. }
  130. comparablePeoples := []Person{
  131. Person{Name: "john", Id: 1, Age: 42},
  132. Person{Name: "bob", Id: 2, Age: 24},
  133. }
  134. if !reflect.DeepEqual(peoples, comparablePeoples) {
  135. t.Errorf("peoples was not filled out properly %v", peoples)
  136. }
  137. }
  138. func TestGetMultipleWithoutCondition(t *testing.T) {
  139. db, _ := OpenDB("test.db")
  140. defer db.Close()
  141. var people1 []Person
  142. db.GetAll(&people1, "id > 0")
  143. var people2 []Person
  144. err := db.GetAll(&people2, "")
  145. if err != nil {
  146. t.Error(err)
  147. }
  148. if len(people1) != len(people2) {
  149. t.Errorf("wrong number of people returned, should be %d, but got %d", len(people1), len(people2))
  150. }
  151. if !reflect.DeepEqual(people1, people2) {
  152. t.Errorf("people2 was not filled out properly %v", people2)
  153. }
  154. }