[#2277] added check for nil dao hooks
This commit is contained in:
		
							parent
							
								
									b8373b23a4
								
							
						
					
					
						commit
						59f23d3d23
					
				| 
						 | 
					@ -749,9 +749,11 @@ func (form *RecordUpsert) Submit(interceptors ...InterceptorFunc[*models.Record]
 | 
				
			||||||
		// but BEFORE the actual record db persistence
 | 
							// but BEFORE the actual record db persistence
 | 
				
			||||||
		// ---
 | 
							// ---
 | 
				
			||||||
		dao.BeforeCreateFunc = func(eventDao *daos.Dao, m models.Model) error {
 | 
							dao.BeforeCreateFunc = func(eventDao *daos.Dao, m models.Model) error {
 | 
				
			||||||
 | 
								if form.dao.BeforeCreateFunc != nil {
 | 
				
			||||||
				if err := form.dao.BeforeCreateFunc(eventDao, m); err != nil {
 | 
									if err := form.dao.BeforeCreateFunc(eventDao, m); err != nil {
 | 
				
			||||||
					return err
 | 
										return err
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if m.GetId() == form.record.GetId() {
 | 
								if m.GetId() == form.record.GetId() {
 | 
				
			||||||
				return form.processFilesToUpload()
 | 
									return form.processFilesToUpload()
 | 
				
			||||||
| 
						 | 
					@ -761,9 +763,11 @@ func (form *RecordUpsert) Submit(interceptors ...InterceptorFunc[*models.Record]
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		dao.BeforeUpdateFunc = func(eventDao *daos.Dao, m models.Model) error {
 | 
							dao.BeforeUpdateFunc = func(eventDao *daos.Dao, m models.Model) error {
 | 
				
			||||||
 | 
								if form.dao.BeforeUpdateFunc != nil {
 | 
				
			||||||
				if err := form.dao.BeforeUpdateFunc(eventDao, m); err != nil {
 | 
									if err := form.dao.BeforeUpdateFunc(eventDao, m); err != nil {
 | 
				
			||||||
					return err
 | 
										return err
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if m.GetId() == form.record.GetId() {
 | 
								if m.GetId() == form.record.GetId() {
 | 
				
			||||||
				return form.processFilesToUpload()
 | 
									return form.processFilesToUpload()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"net/http/httptest"
 | 
						"net/http/httptest"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
| 
						 | 
					@ -1047,41 +1048,54 @@ func TestRecordUpsertUploadFailure(t *testing.T) {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						daos := []*daos.Dao{
 | 
				
			||||||
 | 
							app.Dao(),                // with hooks
 | 
				
			||||||
 | 
							daos.New(app.Dao().DB()), // without hooks
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for i, dao := range daos {
 | 
				
			||||||
		// create with invalid file
 | 
							// create with invalid file
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
								prefix := fmt.Sprintf("%d-create", i)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			new := models.NewRecord(collection)
 | 
								new := models.NewRecord(collection)
 | 
				
			||||||
			new.Id = "123456789012341"
 | 
								new.Id = "123456789012341"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			form := forms.NewRecordUpsert(app, new)
 | 
								form := forms.NewRecordUpsert(app, new)
 | 
				
			||||||
 | 
								form.SetDao(dao)
 | 
				
			||||||
			form.LoadData(map[string]any{"title": "new_test"})
 | 
								form.LoadData(map[string]any{"title": "new_test"})
 | 
				
			||||||
			form.AddFiles("files", &filesystem.File{Reader: &filesystem.PathReader{Path: "/tmp/__missing__"}})
 | 
								form.AddFiles("files", &filesystem.File{Reader: &filesystem.PathReader{Path: "/tmp/__missing__"}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if err := form.Submit(); err == nil {
 | 
								if err := form.Submit(); err == nil {
 | 
				
			||||||
			t.Fatal("Expected error, got nil")
 | 
									t.Fatalf("[%s] Expected error, got nil", prefix)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if r, err := app.Dao().FindRecordById(collection.Id, new.Id); err == nil {
 | 
								if r, err := app.Dao().FindRecordById(collection.Id, new.Id); err == nil {
 | 
				
			||||||
			t.Fatalf("Expected the inserted record to be deleted, found \n%v", r.PublicExport())
 | 
									t.Fatalf("[%s] Expected the inserted record to be deleted, found \n%v", prefix, r.PublicExport())
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// update with invalid file
 | 
							// update with invalid file
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
								prefix := fmt.Sprintf("%d-update", i)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			record, err := app.Dao().FindRecordById(collection.Id, "1tmknxy2868d869")
 | 
								record, err := app.Dao().FindRecordById(collection.Id, "1tmknxy2868d869")
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Fatal(err)
 | 
									t.Fatal(err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			form := forms.NewRecordUpsert(app, record)
 | 
								form := forms.NewRecordUpsert(app, record)
 | 
				
			||||||
 | 
								form.SetDao(dao)
 | 
				
			||||||
			form.LoadData(map[string]any{"title": "update_test"})
 | 
								form.LoadData(map[string]any{"title": "update_test"})
 | 
				
			||||||
			form.AddFiles("files", &filesystem.File{Reader: &filesystem.PathReader{Path: "/tmp/__missing__"}})
 | 
								form.AddFiles("files", &filesystem.File{Reader: &filesystem.PathReader{Path: "/tmp/__missing__"}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if err := form.Submit(); err == nil {
 | 
								if err := form.Submit(); err == nil {
 | 
				
			||||||
			t.Fatal("Expected error, got nil")
 | 
									t.Fatalf("[%s] Expected error, got nil", prefix)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if r, _ := app.Dao().FindRecordById(collection.Id, record.Id); r == nil || r.GetString("title") == "update_test" {
 | 
								if r, _ := app.Dao().FindRecordById(collection.Id, record.Id); r == nil || r.GetString("title") == "update_test" {
 | 
				
			||||||
			t.Fatalf("Expected the record changes to be reverted, got \n%v", r.PublicExport())
 | 
									t.Fatalf("[%s] Expected the record changes to be reverted, got \n%v", prefix, r.PublicExport())
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue