feat: organisation logo (attachOne logo) and payload helpers

- Organisation gains the public attachOne logo (OrganisationLogoField),
  editable as an image upload on the Organisations form; avatar unchanged
- OrganisationLogoURL and OrganisationLogoFields give applications the
  has_logo, logo and logo_url keys for their organisation payloads
- no migration: attachments live in system_files
This commit is contained in:
Jakub Zych
2026-10-23 17:03:13 +02:00
parent ee5c096d0d
commit f20a8d3b98
8 changed files with 124 additions and 9 deletions

View File

@@ -53,9 +53,9 @@ func TestAdminModelContracts(t *testing.T) {
if (User{}).MorphName() != `Golem15\User\Models\User` || (Organisation{}).MorphName() != `Golem15\User\Models\Organisation` {
t.Fatalf("morph names = %q / %q", (User{}).MorphName(), (Organisation{}).MorphName())
}
for name, relations := range map[string]int{"user": len((User{}).AttachRelations()), "organisation": len((Organisation{}).AttachRelations())} {
if relations != 1 {
t.Fatalf("%s attach relations = %d", name, relations)
for name, want := range map[string][2]int{"user": {len((User{}).AttachRelations()), 1}, "organisation": {len((Organisation{}).AttachRelations()), 2}} {
if want[0] != want[1] {
t.Fatalf("%s attach relations = %d, want %d", name, want[0], want[1])
}
}
if rel := (User{}).AttachRelations()[0]; AvatarField != "avatar" || rel.Name != AvatarField || !rel.Public {
@@ -64,6 +64,9 @@ func TestAdminModelContracts(t *testing.T) {
if rel := (Organisation{}).AttachRelations()[0]; rel.Name != OrganisationAvatarField || !rel.Public {
t.Fatalf("organisation avatar relation = %+v", rel)
}
if rel := (Organisation{}).AttachRelations()[1]; OrganisationLogoField != "logo" || rel.Name != OrganisationLogoField || !rel.Public {
t.Fatalf("organisation logo relation = %+v", rel)
}
if got := (User{}).FilterScopes(); !reflect.DeepEqual(got, []string{FilterByGroup}) || FilterByGroup != "filterByGroup" {
t.Fatalf("User.FilterScopes = %v", got)