Example #1
0
func gettask(c *gin.Context) (*todo.Todo, *todolist.TodoList, bool) {
	u, ok := user.FromContext(c)
	if !ok {
		ctl.Render403(c)
		return nil, nil, false
	}
	id, err := strconv.Atoi(c.Param("id"))
	if err != nil {
		ctl.Render404(c)
		return nil, nil, false
	}
	td, ok := todo.Find(uint(id))
	if !ok {
		ctl.Render404(c)
		return nil, nil, false
	}
	l, ok := todolist.Find(td.TodoListID)
	if !ok {
		ctl.Render500(c)
		return nil, nil, false
	}
	if u.ID != l.UserID {
		ctl.Render403(c)
		return nil, nil, false
	}
	return td, l, true
}
Example #2
0
func TestTodoList_Destroy(t *testing.T) {
	title1 := "First todolist"
	title2 := "Second todolist"

	list1 := New(title1)
	list2 := New(title2)
	unsaved := New("Unsaved")

	if list1 == nil || list2 == nil || unsaved == nil {
		t.FailNow()
	}
	if err := list1.Save(); err != nil {
		t.FailNow()
	}
	if err := list2.Save(); err != nil {
		t.FailNow()
	}

	id1 := list1.ID
	id2 := list2.ID
	list1.Add("First")
	list1.Add("Second")
	todos1 := list1.Todos
	list1.Destroy()
	if _, ok := Find(id1); ok {
		t.Error("Структура уничтоженная с помощью Destroy(), не должна быть найдена в базе")
	}

	for _, t1 := range todos1 {
		if _, ok := todo.Find(t1.ID); ok {
			t.Error("Destroy() должно уничтожать все todo списка.")
			break
		}
	}

	if _, ok := Find(id2); !ok {
		t.Error("Destroy() не должно затрагивать другие структуры в базе и их ID")
	}

	if t.Failed() {
		t.FailNow()
	}

	t.Log("Destroy() должно без паники обрабатывать несохраненные структуры")
	unsaved.Destroy()

	if _, ok := Find(id1); ok {
		t.Error("Destroy() на несохраненной структуре не должно затрагивать другие структуры в базе")
	}
	if _, ok := Find(id2); !ok {
		t.Error("Destroy() на несохраненной структуре не должно затрагивать другие структуры в базе")
	}
}