diff --git a/.docker/compile_base.sh b/.docker/compile_base.sh new file mode 100755 index 00000000..4661350f --- /dev/null +++ b/.docker/compile_base.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker buildx build -f .docker/base.Dockerfile . diff --git a/.phpunit.cache/test-results b/.phpunit.cache/test-results new file mode 100644 index 00000000..b38101fc --- /dev/null +++ b/.phpunit.cache/test-results @@ -0,0 +1 @@ +{"version":"pest_3.1.0","defects":{"Tests\\Feature\\Form\\FormRegisterActionTest::testItSavesParticipantAsModel":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSendsEmailToParticipant":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItDoesntSendEmailWhenNoMailFieldGiven":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesGroupFieldWithParentGroupField":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testGroupFieldCanBeUnsetWhenGiven":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testGroupFieldCanBeNullWhenNotRequired":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesGroupWithParentFieldField":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSetsMitgliedsnrForMainMember":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItDoesntSetMitgliedsnrWhenFieldDoesntHaveType":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItDoesntSyncMembersWhenTwoMembersMatch":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItAddsMitgliedsnrFromMembers":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItAddsOtherFieldsOfMember":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItAddsMemberForNonNami":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesNamiTypeFieldsForNonMembers":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesMembersFields":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesIfMemberExists":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesMembersCheckboxesOptions":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesMembersCheckboxesAsArray":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSetsDefaultValueForFieldsThatAreNotNamiFillable":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testNamiFieldCanBeEmptyArray":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testNamiFieldMustBeArray":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testParticipantsHaveRelationToActualMember":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSetsRegionIdAndGroupIdOfParentGroup":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSetsRegionIfMemberIsDirectRegionMember":8,"Tests\\Feature\\Form\\FormRegisterMailTest::testItShowsFormContent":8,"Tests\\Feature\\Form\\FormRegisterMailTest::testItShowsParticipantGreeting":8,"Tests\\Feature\\Form\\FormRegisterMailTest::testItAttachesMailAttachments":8,"Tests\\Feature\\Form\\FormStoreActionTest::testItStoresForm":8,"Tests\\Feature\\Form\\FormStoreActionTest::testRegistrationDatesCanBeNull":8,"Tests\\Feature\\Form\\FormStoreActionTest::testItStoresExport":8,"Tests\\Feature\\Form\\FormUpdateActionTest::testItSetsCustomAttributesOfFields":8,"Tests\\Feature\\Form\\FormUpdateActionTest::testItSetsTexts":8,"Tests\\Feature\\Form\\FormUpdateActionTest::testItClearsFrontendCacheWhenFormUpdated":8,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesExport":8,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesActiveColumnsWhenFieldRemoved":8,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesIntroOfSections":8,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesActiveState":8,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesPrivateState":8,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesActiveColumnsWhenFieldsAdded":8,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesPrevention":8,"Tests\\Feature\\Form\\FormUpdateMetaActionTest::testItUpdatesMetaOfForm":8,"Tests\\Feature\\Form\\FormUpdateMetaActionTest::testItCanSetCreatedAtMeta":8,"Tests\\Feature\\Form\\FormtemplateStoreActionTest::testItStoresTemplates":8,"Tests\\Feature\\Form\\IsDirtyActionTest::testItChecksIfFormIsDirty":8,"Tests\\Feature\\Form\\ParticipantAssignActionTest::testItAssignsAParticipantToAMenber":8,"Tests\\Feature\\Form\\ParticipantDestroyActionTest::testItCanDestroyAParticipant":8,"Tests\\Feature\\Form\\ParticipantExportActionTest::testItShowsParticipantsAndColumns":8,"Tests\\Feature\\Form\\ParticipantFieldsActionTest::testItShowsParticipantsFields":8,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItShowsParticipantsAndColumns":8,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItShowsEmptyFilters":8,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItDisplaysHasNamiField":8,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItFiltersParticipantsByCheckboxValue":8,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItFiltersParticipantsByDropdownValue":8,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItFiltersParticipantsByRadioValue":8,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItPresentsNamiField":8,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItShowsRegisteredAtColumnAndAttribute":8,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItShowsOnlyParentParticipantsWhenFilterEnabled":8,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItShowsChildrenCount":8,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItShowsPreventionState":8,"Tests\\Feature\\Form\\ParticipantStoreActionTest::testItStoresParticipant":8,"Tests\\Feature\\Form\\ParticipantStoreActionTest::testItHasValidation":8,"Tests\\Feature\\Form\\ParticipantUpdateActionTest::testItUpdatesParticipant":8,"Tests\\Feature\\Form\\ParticipantUpdateActionTest::testItHasValidation":8,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#9":7,"Tests\\Feature\\Invoice\\InvoiceStoreActionTest::testItValidatesInput":8,"P\\Tests\\Feature\\Activity\\EditTest::__pest_evaluable_it_testItEditsAnActivity":7,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItCanUpdateSubactivitiesOfNamiActivity":7,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItUpdatesName":7,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItCannotUpdateAnActivityFromNami":7,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItCannotRemoveANamiSubactivityFromANamiActivity":7,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItCannotSetSubactivityIfItStillHasMembers":7,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItCannotAddANamiSubactivityToANamiActivity":7,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testLala":7,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_test_it_succeeds_when_member_has_another_activity":7,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_test_it_succeeds_when_membership_is_not_of_removing_activity":7,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_test_it_succeeds_when_membership_is_not_of_removing_subactivity":7,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_test_it_cannot_set_subactivity_to_a_string":7,"Tests\\Unit\\Mailman\\ServiceTest::testItGetsMembersFromList":8,"Tests\\Unit\\Mailman\\ServiceTest::testItThrowsExceptionWhenLoginFailed":7,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#0":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#1":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#2":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#3":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#4":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#5":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#6":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#7":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#8":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#9":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#10":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#11":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#12":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#13":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#14":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#15":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#16":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#17":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#18":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#19":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#20":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#21":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#22":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#23":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#24":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#25":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#26":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#27":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#28":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#29":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#30":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#31":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#32":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#33":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#34":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#35":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#36":8,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#37":8,"Tests\\Feature\\Membership\\IndexTest::testItShowsActivityAndSubactivityNamesOfMember":8,"Tests\\Feature\\Membership\\IndexTest::testItShowsIfMembershipIsActive#0":8,"Tests\\Feature\\Membership\\IndexTest::testItShowsIfMembershipIsActive#1":8,"Tests\\Feature\\Membership\\IndexTest::testItShowsIfMembershipIsActive#2":8,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#0":8,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#1":8,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#2":8,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#3":8,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#4":8,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#5":8,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#6":8,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#7":8,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#8":8,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#9":8,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#10":8,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\PutMemberTest::testPushASingleMember":8,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\PutMemberTest::testUpdateAMemberWithForeignAttributes":8,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\PutMemberTest::testEmailCanBeNull":8,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\PutMemberTest::testItMergesKontoverbindung":8,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\PutMemberTest::testGenderCanBeNull":8,"Zoomyboy\\LaravelNami\\Tests\\Unit\\MemberFactoryTest::testItCanRenderMemberAsJson":8,"Zoomyboy\\LaravelNami\\Tests\\Unit\\MembershipEntryFactoryTest::testItCanRenderACourseAsJson":8,"P\\Tests\\Arch::__pest_evaluable_expect__App__\u2192_toUseStrictTypes__\u2192_not_\u2192_toUse___die____dd____dump__":7,"P\\Tests\\Arch::__pest_evaluable_expect__App_Invoice_Models__\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":7,"P\\Tests\\Arch::__pest_evaluable_expect___App_Invoice_Models_Invoice___\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":7,"P\\Tests\\Arch::__pest_evaluable_expect___app_Invoice_Models_Invoice_php___\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":5,"P\\Tests\\Arch::__pest_evaluable_expect_____app_Invoice_Models_Invoice_php___\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":5,"P\\Tests\\Arch::__pest_evaluable_expect_Illuminate_Support_Collection_\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":7,"P\\Tests\\Arch::__pest_evaluable_expect___App_Invoice_Models_Invoice____App_Invoice_Models_InvoicePosition___\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":7,"Tests\\Feature\\Membership\\TestersBlockTest::testItHasData":8,"P\\Modules\\Dashboard\\tests\\DashboardComponentTest::__pest_evaluable_it_renders_successfully":8,"P\\Modules\\Dashboard\\tests\\DashboardComponentTest::__pest_evaluable_it_renders_page_successfully":7},"times":{"Tests\\Feature\\Activity\\CreateTest::testItCreatesAnActivity":0.246,"Tests\\Feature\\Activity\\DestroyTest::testItDeletesAnActivity":0.058,"Tests\\Feature\\Activity\\DestroyTest::testItCannotDeleteAnActivityThatHasMemberships":0.105,"Tests\\Feature\\Activity\\DestroyTest::testItCannotDeleteActivityInNami":0.044,"Tests\\Feature\\Activity\\EditTest::testItEditsAnActivity":0.067,"Tests\\Feature\\Activity\\IndexTest::testItDisplaysActivities":0.065,"Tests\\Feature\\Activity\\StoreTest::testItStoresAnActivity":0.052,"Tests\\Feature\\Activity\\StoreTest::testNameIsRequired":0.04,"Tests\\Feature\\Activity\\StoreTest::testNamiIdIsNotSet":0.049,"Tests\\Feature\\Activity\\StoreTest::testItCanStoreASubactivityWithTheActivity":0.053,"Tests\\Feature\\Activity\\SubactivityShowTest::testItShowsASubactivity":0.067,"Tests\\Feature\\Activity\\SubactivityTest::testItStoresASubactivity":0.063,"Tests\\Feature\\Activity\\SubactivityTest::testNameIsRequired":0.044,"Tests\\Feature\\Activity\\SubactivityTest::testNameIsUnique":0.051,"Tests\\Feature\\Activity\\SubactivityTest::testItNeedsAtLeasttOneActivity":0.038,"Tests\\Feature\\Activity\\SubactivityTest::testNamiIdIsNotSet":0.056,"Tests\\Feature\\Activity\\SubactivityTest::testItCannotUpdateNameIfInNami":0.056,"Tests\\Feature\\Activity\\SubactivityTest::testItCannotUpdateNamiId":0.067,"Tests\\Feature\\Activity\\SubactivityTest::testItCannotSetNamiId":0.065,"Tests\\Feature\\Activity\\SubactivityTest::testItCanUpdateIsFilterableIfInNami":0.072,"Tests\\Feature\\Activity\\SubactivityTest::testItCanUpdateNameWhenNotInNami":0.062,"Tests\\Feature\\Activity\\SubactivityTest::testNameShouldBeUnique":0.072,"Tests\\Feature\\Activity\\SubactivityTest::testItCanSetAnotherActivity":0.064,"Tests\\Feature\\Activity\\SubactivityTest::testItCannotSetAnotherNamiActivity":0.066,"Tests\\Feature\\Activity\\SubactivityTest::testItCannotRemoveANamiActivity":0.065,"Tests\\Feature\\Activity\\SubactivityTest::testItCannotRemoveActivityIfMembershipsHasMembers":0.103,"Tests\\Feature\\Activity\\SubactivityTest::testItCannotSetNoActivity":0.054,"Tests\\Feature\\Activity\\UpdateTest::testItCannotUpdateAnActivityFromNami":0.246,"Tests\\Feature\\Activity\\UpdateTest::testItCanUpdateSubactivitiesOfNamiActivity":0.072,"Tests\\Feature\\Activity\\UpdateTest::testItCannotRemoveANamiSubactivityFromANamiActivity":0.059,"Tests\\Feature\\Activity\\UpdateTest::testItCannotAddANamiSubactivityToANamiActivity":0.06,"Tests\\Feature\\Activity\\UpdateTest::testItCannotRemoveANamiSubactivityFromANamiActivityAndSetAnother":0.06,"Tests\\Feature\\Activity\\UpdateTest::testNameIsRequired":0.05,"Tests\\Feature\\Activity\\UpdateTest::testItUpdatesName":0.059,"Tests\\Feature\\Activity\\UpdateTest::testItSetsSubactivities":0.075,"Tests\\Feature\\Activity\\UpdateTest::testItCannotSetNamiId":0.057,"Tests\\Feature\\Activity\\UpdateTest::testItUnsetsSubactivities":0.069,"Tests\\Feature\\Activity\\UpdateTest::testItCannotSetSubactivityIfItStillHasMembers":0.114,"Tests\\Feature\\Form\\FormtemplateDestroyActionTest::testItDestroysAFormtemplate":0.038,"Tests\\Feature\\Form\\FormtemplateIndexActionTest::testItDisplaysIndexPage":0.075,"Tests\\Feature\\Form\\FormtemplateUpdateActionTest::testItUpdatesTemplates":0.046,"Tests\\Feature\\Form\\FormtemplateUpdateActionTest::testItUpdatesTexts":0.05,"Tests\\Feature\\Form\\FormtemplateUpdateActionTest::testNameIsRequired":0.03,"Tests\\Feature\\Form\\ParticipantAssignActionTest::testItAssignsAParticipantToAMenber":0.086,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSavesParticipantAsModel":0.238,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSendsEmailToParticipant":0.115,"Tests\\Feature\\Form\\FormRegisterActionTest::testItDoesntSendEmailWhenNoMailFieldGiven":0.106,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesGroupFieldWithParentGroupField":0.098,"Tests\\Feature\\Form\\FormRegisterActionTest::testGroupFieldCanBeUnsetWhenGiven":0.105,"Tests\\Feature\\Form\\FormRegisterActionTest::testGroupFieldCanBeNullWhenNotRequired":0.089,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesGroupWithParentFieldField":0.13,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSetsMitgliedsnrForMainMember":0.131,"Tests\\Feature\\Form\\FormRegisterActionTest::testItDoesntSetMitgliedsnrWhenFieldDoesntHaveType":0.11,"Tests\\Feature\\Form\\FormRegisterActionTest::testItDoesntSyncMembersWhenTwoMembersMatch":0.127,"Tests\\Feature\\Form\\FormRegisterActionTest::testItAddsMitgliedsnrFromMembers":0.15,"Tests\\Feature\\Form\\FormRegisterActionTest::testItAddsOtherFieldsOfMember":0.126,"Tests\\Feature\\Form\\FormRegisterActionTest::testItAddsMemberForNonNami":0.141,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesNamiTypeFieldsForNonMembers":0.069,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesMembersFields":0.118,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesIfMemberExists":0.081,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesMembersCheckboxesOptions":0.115,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesMembersCheckboxesAsArray":0.097,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSetsDefaultValueForFieldsThatAreNotNamiFillable":0.138,"Tests\\Feature\\Form\\FormRegisterActionTest::testNamiFieldCanBeEmptyArray":0.087,"Tests\\Feature\\Form\\FormRegisterActionTest::testNamiFieldMustBeArray":0.071,"Tests\\Feature\\Form\\FormRegisterActionTest::testParticipantsHaveRelationToActualMember":0.113,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSetsRegionIdAndGroupIdOfParentGroup":0.146,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSetsRegionIfMemberIsDirectRegionMember":0.134,"Tests\\Feature\\Form\\FormRegisterMailTest::testItShowsFormContent":0.124,"Tests\\Feature\\Form\\FormRegisterMailTest::testItShowsParticipantGreeting":0.106,"Tests\\Feature\\Form\\FormRegisterMailTest::testItAttachesMailAttachments":0.132,"Tests\\Feature\\Form\\FormStoreActionTest::testItStoresForm":0.223,"Tests\\Feature\\Form\\FormStoreActionTest::testRegistrationDatesCanBeNull":0.131,"Tests\\Feature\\Form\\FormStoreActionTest::testItStoresExport":0.138,"Tests\\Feature\\Form\\FormUpdateActionTest::testItSetsCustomAttributesOfFields":0.105,"Tests\\Feature\\Form\\FormUpdateActionTest::testItSetsTexts":0.101,"Tests\\Feature\\Form\\FormUpdateActionTest::testItClearsFrontendCacheWhenFormUpdated":0.088,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesExport":0.093,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesActiveColumnsWhenFieldRemoved":0.135,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesIntroOfSections":0.099,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesActiveState":0.134,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesPrivateState":0.141,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesActiveColumnsWhenFieldsAdded":0.132,"Tests\\Feature\\Form\\FormUpdateActionTest::testItUpdatesPrevention":0.097,"Tests\\Feature\\Form\\FormUpdateMetaActionTest::testItUpdatesMetaOfForm":0.092,"Tests\\Feature\\Form\\FormUpdateMetaActionTest::testItCanSetCreatedAtMeta":0.071,"Tests\\Feature\\Form\\FormtemplateStoreActionTest::testItStoresTemplates":0.076,"Tests\\Feature\\Form\\IsDirtyActionTest::testItChecksIfFormIsDirty":0.092,"Tests\\Feature\\Form\\ParticipantDestroyActionTest::testItCanDestroyAParticipant":0.076,"Tests\\Feature\\Form\\ParticipantExportActionTest::testItShowsParticipantsAndColumns":0.253,"Tests\\Feature\\Form\\ParticipantFieldsActionTest::testItShowsParticipantsFields":0.082,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItShowsParticipantsAndColumns":0.167,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItShowsEmptyFilters":0.14,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItDisplaysHasNamiField":0.079,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItFiltersParticipantsByCheckboxValue":0.157,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItFiltersParticipantsByDropdownValue":0.225,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItFiltersParticipantsByRadioValue":0.358,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItPresentsNamiField":0.138,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItShowsRegisteredAtColumnAndAttribute":0.088,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItShowsOnlyParentParticipantsWhenFilterEnabled":0.118,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItShowsChildrenCount":0.106,"Tests\\Feature\\Form\\ParticipantIndexActionTest::testItShowsPreventionState":0.095,"Tests\\Feature\\Form\\ParticipantStoreActionTest::testItStoresParticipant":0.08,"Tests\\Feature\\Form\\ParticipantStoreActionTest::testItHasValidation":0.069,"Tests\\Feature\\Form\\ParticipantUpdateActionTest::testItUpdatesParticipant":0.078,"Tests\\Feature\\Form\\ParticipantUpdateActionTest::testItHasValidation":0.069,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#0":0.099,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#1":0.097,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#2":0.098,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#3":0.107,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#4":0.1,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#5":0.102,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#6":0.103,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#7":0.103,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#8":0.099,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#9":0.11,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#10":0.103,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#11":0.1,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#12":0.107,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#13":0.113,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForBlockConditions#14":0.138,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#0":0.115,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#1":0.114,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#2":0.114,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#3":0.12,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#4":0.121,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#5":0.115,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#6":0.114,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#7":0.118,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#8":0.114,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#9":0.127,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#10":0.115,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#11":0.118,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#12":0.118,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#13":0.114,"Tests\\Feature\\Form\\FormRegisterMailTest::testItFiltersForAttachments#14":0.121,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#0":0.073,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#1":0.088,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#2":0.073,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#3":0.1,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#4":0.064,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#5":0.067,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#6":0.074,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#7":0.068,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#8":0.07,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#9":0.094,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#10":0.089,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#11":0.069,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#12":0.092,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#13":0.069,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#14":0.089,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#15":0.088,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#16":0.071,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#17":0.073,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#18":0.066,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#19":0.07,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#20":0.071,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#21":0.086,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#22":0.067,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#23":0.086,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#24":0.066,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#25":0.067,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#26":0.07,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#27":0.088,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#28":0.071,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#29":0.067,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#30":0.068,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#31":0.073,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#32":0.069,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#33":0.08,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#34":0.087,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#35":0.078,"Tests\\Feature\\Form\\FormRegisterActionTest::testItValidatesInput#36":0.071,"Tests\\Feature\\Form\\FormStoreActionTest::testItValidatesRequests#0":0.045,"Tests\\Feature\\Form\\FormStoreActionTest::testItValidatesRequests#1":0.044,"Tests\\Feature\\Form\\FormStoreActionTest::testItValidatesRequests#2":0.045,"Tests\\Feature\\Form\\FormStoreActionTest::testItValidatesRequests#3":0.045,"Tests\\Feature\\Form\\FormStoreActionTest::testItValidatesRequests#4":0.047,"Tests\\Feature\\Form\\FormStoreActionTest::testItValidatesRequests#5":0.045,"Tests\\Feature\\Form\\FormtemplateStoreActionTest::testItValidatesRequests#0":0.031,"Tests\\Feature\\Form\\FormtemplateStoreActionTest::testItValidatesRequests#1":0.032,"Tests\\Feature\\Form\\FormtemplateStoreActionTest::testItValidatesRequests#2":0.041,"Tests\\Feature\\Form\\FormtemplateStoreActionTest::testItValidatesRequests#3":0.044,"Tests\\Feature\\Form\\FormtemplateStoreActionTest::testItValidatesRequests#4":0.042,"Tests\\Feature\\Form\\FormtemplateStoreActionTest::testItValidatesRequests#5":0.051,"Tests\\Feature\\Form\\FormtemplateStoreActionTest::testItValidatesRequests#6":0.041,"Tests\\Feature\\Form\\FormtemplateStoreActionTest::testItValidatesRequests#7":0.041,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#0":0.136,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#1":0.124,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#2":0.125,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#3":0.129,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#4":0.135,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#5":0.128,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#6":0.127,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#7":0.133,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#8":0.127,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#9":0.129,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#10":0.124,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#11":0.132,"Tests\\Feature\\Form\\FormRegisterActionTest::testItSynchsMemberAttributes#12":0.128,"Tests\\Feature\\Invoice\\InvoiceStoreActionTest::testItCanCreateAnInvoice":0.117,"Tests\\Feature\\Invoice\\InvoiceStoreActionTest::testItValidatesInput":0.003,"Tests\\Feature\\Invoice\\InvoiceStoreActionTest::testItValidatesInput#0":0.026,"Tests\\Feature\\Invoice\\InvoiceStoreActionTest::testItValidatesInput#1":0.023,"Tests\\Feature\\Invoice\\InvoiceStoreActionTest::testItValidatesInput#2":0.022,"Tests\\Feature\\Invoice\\InvoiceStoreActionTest::testItValidatesInput#3":0.023,"Tests\\Feature\\Invoice\\InvoiceStoreActionTest::testItValidatesInput#4":0.022,"Tests\\Feature\\Invoice\\InvoiceStoreActionTest::testItValidatesInput#5":0.022,"Tests\\Feature\\Invoice\\InvoiceStoreActionTest::testItValidatesInput#6":0.021,"Tests\\Feature\\Invoice\\InvoiceStoreActionTest::testItValidatesInput#7":0.023,"Tests\\Feature\\Invoice\\InvoiceStoreActionTest::testItValidatesInput#8":0.021,"P\\Tests\\Feature\\Activity\\EditTest::__pest_evaluable_it_testItEditsAnActivity":0.357,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItCannotUpdateAnActivityFromNami":0.321,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItCanUpdateSubactivitiesOfNamiActivity":0.347,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItCannotRemoveANamiSubactivityFromANamiActivity":0.339,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItCannotAddANamiSubactivityToANamiActivity":0.349,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItCannotRemoveANamiSubactivityFromANamiActivityAndSetAnother":0.064,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testNameIsRequired":0.054,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItUpdatesName":0.06,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItSetsSubactivities":0.058,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItCannotSetNamiId":0.058,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItUnsetsSubactivities":0.074,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testItCannotSetSubactivityIfItStillHasMembers":0.392,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_testLala":0.173,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_test_it_succeeds_when_member_has_another_activity":0.186,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_test_it_succeeds_when_membership_is_not_of_removing_subactivity":0.11,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_test_it_succeeds_when_membership_is_not_of_removing_activity":0.12,"P\\Tests\\Feature\\Activity\\UpdateTest::__pest_evaluable_it_test_it_cannot_set_subactivity_to_a_string":0.111,"Tests\\Feature\\Member\\StoreTest::testItCanStoreAMember":0.261,"Tests\\Feature\\Member\\StoreTest::testItCanStoreAMemberWithoutNami":0.084,"Tests\\Feature\\Member\\StoreTest::testItUpdatesPhoneNumber":0.058,"Tests\\Feature\\Member\\StoreTest::testItHasErrorWhenPhoneNumberIsInvalid":0.044,"Tests\\Feature\\Member\\StoreTest::testItDoesntRequireBirthdayWhenNotInNami":0.055,"Tests\\Feature\\Member\\StoreTest::testItDoesntNeedSubscription":0.057,"Tests\\Feature\\Member\\StoreTest::testItRequiresFields":0.058,"Tests\\Feature\\Member\\StoreTest::testSubscriptionIsRequiredIfFirstActivityIsPaid":0.05,"Tests\\Unit\\Mailman\\ServiceTest::testItChecksForCredentials":0.018,"Tests\\Unit\\Mailman\\ServiceTest::testItFailsWhenChckingCredentials":0.002,"Tests\\Unit\\Mailman\\ServiceTest::testItGetsMembersFromList":0.03,"Tests\\Unit\\Mailman\\ServiceTest::testItThrowsExceptionWhenLoginFailed":0.003,"Tests\\Unit\\Mailman\\ServiceTest::testItCanGetLists":0.004,"Tests\\Unit\\Mailman\\ServiceTest::testItCanCreateLists":0.005,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#0":0.007,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#1":0.018,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#2":0.004,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#3":0.005,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#4":0.005,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#5":0.006,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#6":0.006,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#7":0.007,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#8":0.007,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#9":0.007,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#10":0.008,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#11":0.008,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#12":0.008,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#13":0.009,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#14":0.009,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#15":0.009,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#16":0.009,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#17":0.009,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#18":0.011,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#19":0.011,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#20":0.012,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#21":0.012,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#22":0.012,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#23":0.013,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#24":0.012,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#25":0.013,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#26":0.013,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#27":0.02,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#28":0.014,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#29":0.015,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#30":0.014,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#31":0.015,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#32":0.015,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#33":0.015,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#34":0.015,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#35":0.016,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#36":0.016,"Tests\\Unit\\Mailman\\ServiceTest::testItReturnsMoreThanOneResult#37":0.016,"Tests\\Feature\\Membership\\IndexTest::testItShowsActivityAndSubactivityNamesOfMember":0.16,"Tests\\Feature\\Membership\\IndexTest::testItShowsIfMembershipIsActive#0":0.1,"Tests\\Feature\\Membership\\IndexTest::testItShowsIfMembershipIsActive#1":0.096,"Tests\\Feature\\Membership\\IndexTest::testItShowsIfMembershipIsActive#2":0.118,"Tests\\Feature\\Member\\ShowTest::testItShowsSingleMember":0.238,"Tests\\Feature\\Member\\ShowTest::testItShowsMinimalSingleMember":0.089,"Tests\\Feature\\Member\\ShowTest::testItShowsIfMembershipIsActive#0":0.117,"Tests\\Feature\\Member\\ShowTest::testItShowsIfMembershipIsActive#1":0.196,"Tests\\Feature\\Member\\ShowTest::testItShowsIfMembershipIsActive#2":0.125,"Tests\\Feature\\Member\\PreventionTest::testItRemembersWhenNotRememberedYet":0.226,"Tests\\Feature\\Member\\PreventionTest::testItDoesntRememberWhenConditionDoesntMatch":0.174,"Tests\\Feature\\Member\\PreventionTest::testItRemembersWhenRememberIsDue":0.181,"Tests\\Feature\\Member\\PreventionTest::testItDoesntRememberWhenRememberingIsNotDue":0.141,"Tests\\Feature\\Member\\PreventionTest::testItDoesntRememberWhenFormDoesntNeedPrevention":0.14,"Tests\\Feature\\Member\\PreventionTest::testItDoesntRememberWhenParticipantDoesntHaveMember":0.131,"Tests\\Feature\\Member\\PreventionTest::testItRemembersNonLeaders":0.135,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#0":0.115,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#1":0.116,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#2":0.105,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#3":0.102,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#4":0.117,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#5":0.117,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#6":0.12,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#7":0.108,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#8":0.118,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#9":0.122,"Tests\\Feature\\Member\\PreventionTest::testItRemembersMember#10":0.131,"Tests\\Feature\\Member\\PreventionTest::testItDoesntRememberParticipantThatHasNoMail":0.094,"Tests\\Feature\\Member\\PreventionTest::testItRendersMail":0.178,"Tests\\Feature\\Member\\PreventionTest::testItRendersSetttingMail":0.116,"Tests\\Feature\\Member\\PreventionTest::testItAppendsTextOfForm":0.145,"Tests\\Feature\\Member\\PreventionTest::testItDoesntAppendTextTwice":0.263,"Tests\\Feature\\Member\\PreventionTest::testItDisplaysBodyTextInMail":0.126,"Tests\\Feature\\Initialize\\InitializeActivitiesTest::testItInitializesActivities":0.104,"Tests\\Feature\\Initialize\\InitializeActivitiesTest::testItInitsOtherFields#0":0.027,"Tests\\Feature\\Initialize\\InitializeActivitiesTest::testItInitsOtherFields#1":0.021,"Tests\\Feature\\Initialize\\InitializeActivitiesTest::testItInitsOtherFields#2":0.036,"Tests\\Feature\\Contribution\\StoreTest::testItCompilesContributionDocumentsViaRequest#0":1.753,"Tests\\Feature\\Contribution\\StoreTest::testItCompilesContributionDocumentsViaRequest#1":1.287,"Tests\\Feature\\Contribution\\StoreTest::testItCompilesContributionDocumentsViaRequest#2":1.236,"Tests\\Feature\\Contribution\\StoreTest::testItCompilesContributionDocumentsViaRequest#3":1.27,"Tests\\Feature\\Contribution\\StoreTest::testItCompilesContributionDocumentsViaRequest#4":1.296,"Tests\\Feature\\Contribution\\StoreTest::testItCompilesGroupNameInSolingenDocument":1.429,"Tests\\Feature\\Contribution\\StoreTest::testItCompilesContributionDocumentsViaApi":1.501,"Tests\\Feature\\Contribution\\StoreTest::testInputShouldBeBase64EncodedJson#0":0.031,"Tests\\Feature\\Contribution\\StoreTest::testInputShouldBeBase64EncodedJson#1":0.03,"Tests\\Feature\\Contribution\\StoreTest::testInputShouldBeBase64EncodedJson#2":0.03,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInput#0":0.075,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInput#1":0.069,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInput#2":0.074,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInput#3":0.078,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInput#4":0.068,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInput#5":0.065,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInput#6":0.068,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInput#7":0.065,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInput#8":0.066,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInput#9":0.066,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInput#10":0.065,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInput#11":0.064,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInput#12":0.069,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInputBeforeGeneration#0":0.067,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInputBeforeGeneration#1":0.077,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInputBeforeGeneration#2":0.073,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInputBeforeGeneration#3":0.069,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInputBeforeGeneration#4":0.068,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInputBeforeGeneration#5":0.068,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInputBeforeGeneration#6":0.075,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInputBeforeGeneration#7":0.068,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInputBeforeGeneration#8":0.077,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInputBeforeGeneration#9":0.077,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInputBeforeGeneration#10":0.068,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInputBeforeGeneration#11":0.068,"Tests\\Feature\\Contribution\\StoreTest::testItValidatesInputBeforeGeneration#12":0.073,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\PutMemberTest::testPushASingleMember":0.018,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\PutMemberTest::testUpdateAMemberWithForeignAttributes":0.004,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\PutMemberTest::testEmailCanBeNull":0.005,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\PutMemberTest::testItMergesKontoverbindung":0.005,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\PutMemberTest::testGenderCanBeNull":0.004,"Zoomyboy\\LaravelNami\\Tests\\Unit\\CourseTest::testGetCoursesOfMember":0.004,"Zoomyboy\\LaravelNami\\Tests\\Unit\\CourseTest::testItGetsMultipleCoursesOfMember":0.004,"Zoomyboy\\LaravelNami\\Tests\\Unit\\CourseTest::testReturnNothingWhenCourseReturnsHtml":0.008,"Zoomyboy\\LaravelNami\\Tests\\Unit\\CourseTest::testReturnEmptyWhenCourseIndexReturnsHtml":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\CourseTest::testStoreACourse":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\CourseTest::testUpdateACourse":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\CourseTest::testThrowExceptionWhenCourseUpdateFailed":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\CourseTest::testItThrowsLoginExceptionWhenFetchingWithWrongCredentials":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\CourseTest::testThrowExceptionWhenStoringFailed":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\CourseTest::testDeleteACourse":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\CourseTest::testShrowExceptionWhenDeletingFailed":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\FetchMemberTest::testGetASingleMember":0.048,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\FetchMemberTest::testGetMinimalData":0.003,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\FetchMemberTest::testFailsFetchingWhenJoinedAtDateIsMissing#0":0.003,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\FetchMemberTest::testFailsFetchingWhenJoinedAtDateIsMissing#1":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\FetchMemberTest::testMemberFetchCanFail":0.003,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\MembershipIndexTest::testGetMembershipsCount":0.005,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\MembershipIndexTest::testMembershipIsInstanceOfDto":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\MembershipIndexTest::testStringsCanBeNull":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\MembershipTest::testMembershipIsInstanceOfDto":0.006,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\MembershipTest::testFetchesMembership":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\MembershipTest::testThrowExceptionWhenFetchingFails":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\MembershipTest::testReturnsNothingWhenFetchingFailsWithHtml":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\MembershipTest::testItGetsNoMembershipsWithNoRights#0":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\MembershipTest::testItCanCreateAMembership":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\MembershipTest::testItCanDeleteAMembership":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\MembershipTest::testItSetsAMembershipsEndDateWhenDeletingFails":0.004,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Api\\MembershipTest::testItDoesntUpdateMembershipWhenNoIdGiven":0.003,"Zoomyboy\\LaravelNami\\Tests\\Unit\\BausteinTest::testGetAllCourses":0.004,"Zoomyboy\\LaravelNami\\Tests\\Unit\\BausteinTest::testThrowExceptionWhenBausteinFetchingFails":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\CourseFactoryTest::testItCanRenderACourseAsJson":0.006,"Zoomyboy\\LaravelNami\\Tests\\Unit\\GetGroupsTest::testGetAllGroups":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\GetGroupsTest::testHasGroupAccess":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\GetGroupsTest::testGetSubgroupsForAGroup":0.004,"Zoomyboy\\LaravelNami\\Tests\\Unit\\GroupsTest::testGetGroups":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\GroupsTest::testGetSubgroups":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\GroupsTest::testNeedsAuthentication":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\GroupsTest::testThrowsExceptionWhenGroupFetchFailed":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\GroupsTest::testThrowsExceptionWhenSubgroupFetchFailed":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\GroupsTest::testItDoesntReturnGroupWhenNoJsonIsReturned":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\LoginTest::testItLoggsInAndSavesCookie":0.003,"Zoomyboy\\LaravelNami\\Tests\\Unit\\LoginTest::testItThrowsExceptionWhenLoginFails":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\LoginTest::testItDoesntSaveCookieWhenLoginFails":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\LoginTest::testItDoesntResetCookieWhenAlreadyLoggedIn":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\LoginTest::testItIgnoresExpiredCookie":0.003,"Zoomyboy\\LaravelNami\\Tests\\Unit\\LoginTest::testItDoesntUseOtherCookieForLogin":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\LoginTest::testItRefreshesLogin":0.004,"Zoomyboy\\LaravelNami\\Tests\\Unit\\MemberFactoryTest::testItCanRenderMemberAsJson":0.007,"Zoomyboy\\LaravelNami\\Tests\\Unit\\Membership\\PushMembershipsTest::testCreateAMembership":0.003,"Zoomyboy\\LaravelNami\\Tests\\Unit\\MembershipEntryFactoryTest::testItCanRenderACourseAsJson":0.003,"Zoomyboy\\LaravelNami\\Tests\\Unit\\PullActivitiesTest::testGetAllActivities":0.005,"Zoomyboy\\LaravelNami\\Tests\\Unit\\PullActivitiesTest::testGetAllSubactivities":0.006,"Zoomyboy\\LaravelNami\\Tests\\Unit\\PullActivitiesTest::testThrowErrorWhenSubactivitiesRequestFails":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\PullActivitiesTest::testContinueIfSubactivitiesRequestReturnsHtml":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\PullConfessionTest::testGetAllConfessions":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\PullGenderTest::testGetAllGenders":0.003,"Zoomyboy\\LaravelNami\\Tests\\Unit\\PullMembershipTest::testGetASingleMembership":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\PullNationalityTest::testGetAllNationalities":0.004,"Zoomyboy\\LaravelNami\\Tests\\Unit\\SearchLayerTest::testItGetsSearchLayerOptionsForFirstLayer":0.004,"Zoomyboy\\LaravelNami\\Tests\\Unit\\SearchLayerTest::testItGetsSecondLayer":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\SearchLayerTest::testItGetsThirdLayer":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\SearchTest::testFindAMemberByMglnr":0.005,"Zoomyboy\\LaravelNami\\Tests\\Unit\\SearchTest::testItFindsMembersByGeneralSearch":0.002,"Zoomyboy\\LaravelNami\\Tests\\Unit\\SearchTest::testItThrowsExceptionWhenSearchFails":0.002,"P\\Tests\\Arch::__pest_evaluable_expect__App__\u2192_toUseStrictTypes__\u2192_not_\u2192_toUse___die____dd____dump__":3.02,"P\\Tests\\Arch::__pest_evaluable_expect__App__\u2192_not_\u2192_toUse___die____dd____dump__":5.878,"P\\Tests\\Arch::__pest_evaluable_expect__App___Models__\u2192_toBeClasses_":0.004,"P\\Tests\\Arch::__pest_evaluable_expect__App___Models__\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":0.007,"P\\Tests\\Arch::__pest_evaluable_expect__App_Invoice_Models__\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":0.059,"P\\Tests\\Arch::__pest_evaluable_expect__App____Models__\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":0.007,"P\\Tests\\Arch::__pest_evaluable_expect___App_Invoice_Models_Invoice___\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":0.048,"P\\Tests\\Arch::__pest_evaluable_expect___app_Invoice_Models_Invoice_php___\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":0.006,"P\\Tests\\Arch::__pest_evaluable_expect_____app_Invoice_Models_Invoice_php___\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":0.006,"P\\Tests\\Arch::__pest_evaluable_expect_Illuminate_Support_Collection_\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":0.005,"P\\Tests\\Arch::__pest_evaluable_expect___App_Invoice_Models_Invoice____App_Invoice_Models_InvoicePosition___\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":0.084,"P\\Tests\\Arch::__pest_evaluable_expect___App_Course_Models_Course____App_Course_Models_CourseMember____App_Fileshare_Models_Fileshare___\u2026__\u2192_toExtend__Illuminate_Database_Eloquent_Model__\u2192_toBeClasses_":0.501,"P\\Tests\\Arch::__pest_evaluable_app":4.173,"Tests\\Feature\\Membership\\TestersBlockTest::testItHasData":0.132,"P\\Modules\\Dashboard\\tests\\DashboardComponentTest::__pest_evaluable_it_renders_successfully":0.106,"P\\Modules\\Dashboard\\tests\\DashboardComponentTest::__pest_evaluable_it_renders_page_successfully":0.096}} \ No newline at end of file diff --git a/app/Dashboard/Actions/IndexAction.php b/app/Dashboard/Actions/IndexAction.php deleted file mode 100644 index 85e3c666..00000000 --- a/app/Dashboard/Actions/IndexAction.php +++ /dev/null @@ -1,31 +0,0 @@ - - */ - public function handle(): array - { - return [ - 'blocks' => app(DashboardFactory::class)->render(), - ]; - } - - public function asController(): Response - { - session()->put('menu', 'dashboard'); - session()->put('title', 'Dashboard'); - - return Inertia::render('dashboard/VIndex', $this->handle()); - } -} diff --git a/app/Dashboard/Blocks/Block.php b/app/Dashboard/Blocks/Block.php deleted file mode 100644 index 73f14549..00000000 --- a/app/Dashboard/Blocks/Block.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - abstract protected function data(): array; - - abstract protected function title(): string; - - abstract protected function component(): string; - - /** - * @return array{data: array, title: string, component: string} - */ - public function render(): array - { - return [ - 'data' => $this->data(), - 'title' => $this->title(), - 'component' => $this->component(), - ]; - } -} diff --git a/app/Efz/EfzPendingBlock.php b/app/Efz/EfzPendingBlock.php index 8fa20b2f..47b69a8a 100644 --- a/app/Efz/EfzPendingBlock.php +++ b/app/Efz/EfzPendingBlock.php @@ -2,7 +2,7 @@ namespace App\Efz; -use App\Dashboard\Blocks\Block; +use Modules\Dashboard\Block; use App\Member\Member; use Illuminate\Database\Eloquent\Builder; @@ -41,4 +41,9 @@ class EfzPendingBlock extends Block { return 'Ausstehende Führungszeugnisse'; } + + public function render(): string + { + return '
'; + } } diff --git a/app/Invoice/MemberPaymentBlock.php b/app/Invoice/MemberPaymentBlock.php index 71fb4aa3..ec70016e 100644 --- a/app/Invoice/MemberPaymentBlock.php +++ b/app/Invoice/MemberPaymentBlock.php @@ -2,7 +2,7 @@ namespace App\Invoice; -use App\Dashboard\Blocks\Block; +use Modules\Dashboard\Block; use App\Invoice\Models\InvoicePosition; use App\Member\Member; @@ -34,4 +34,9 @@ class MemberPaymentBlock extends Block { return 'Ausstehende Mitgliedsbeiträge'; } + + public function render(): string + { + return '
'; + } } diff --git a/app/Member/PsPendingBlock.php b/app/Member/PsPendingBlock.php index 5cc59c14..e005e6bc 100644 --- a/app/Member/PsPendingBlock.php +++ b/app/Member/PsPendingBlock.php @@ -2,7 +2,7 @@ namespace App\Member; -use App\Dashboard\Blocks\Block; +use Modules\Dashboard\Block; use Illuminate\Database\Eloquent\Builder; class PsPendingBlock extends Block @@ -47,4 +47,9 @@ class PsPendingBlock extends Block { return 'Ausstehende Präventionsschulungen'; } + + public function render(): string + { + return '
'; + } } diff --git a/app/Membership/AgeGroupCountBlock.php b/app/Membership/AgeGroupCountBlock.php index 9019c455..b785ca6b 100644 --- a/app/Membership/AgeGroupCountBlock.php +++ b/app/Membership/AgeGroupCountBlock.php @@ -2,7 +2,7 @@ namespace App\Membership; -use App\Dashboard\Blocks\Block; +use Modules\Dashboard\Block; use App\Member\Membership; use Illuminate\Database\Eloquent\Builder; @@ -55,4 +55,9 @@ class AgeGroupCountBlock extends Block { return 'Gruppierungs-Verteilung'; } + + public function render(): string + { + return '
'; + } } diff --git a/app/Membership/TestersBlock.php b/app/Membership/TestersBlock.php index 49cf7f25..954bd5b9 100644 --- a/app/Membership/TestersBlock.php +++ b/app/Membership/TestersBlock.php @@ -2,7 +2,7 @@ namespace App\Membership; -use App\Dashboard\Blocks\Block; +use Modules\Dashboard\Block; use App\Member\Member; use Illuminate\Database\Eloquent\Builder; @@ -40,4 +40,9 @@ class TestersBlock extends Block { return 'Endende Schhnupperzeiten'; } + + public function render(): string + { + return '
'; + } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 27fca8a7..12abeb6e 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -37,6 +37,7 @@ class AppServiceProvider extends ServiceProvider app()->extend('media-library-helpers', fn ($p) => $p->put('form', Form::class)); + Blade::componentNamespace('App\\View\\Ui', 'ui'); Blade::componentNamespace('App\\View\\Mail', 'mail-view'); } diff --git a/app/View/Ui/Box.php b/app/View/Ui/Box.php new file mode 100644 index 00000000..e085d605 --- /dev/null +++ b/app/View/Ui/Box.php @@ -0,0 +1,38 @@ + !$second, + 'bg-gray-700 group-[.is-popup]:bg-zinc-600' => $second, + 'p-3 rounded-lg flex flex-col' => true + ])> +
+ @if($title) +
{{$title}}
+ @endif + {{$inTitle}} +
+
+ {{ $slot }} +
+ + HTML; + } +} diff --git a/composer.json b/composer.json index 7eabe9b5..e9408df0 100644 --- a/composer.json +++ b/composer.json @@ -61,6 +61,7 @@ "laravel/ui": "^4.0", "league/csv": "^9.9", "league/flysystem-webdav": "dev-master as 3.28.0", + "livewire/livewire": "^3.5", "lorisleiva/laravel-actions": "^2.4", "meilisearch/meilisearch-php": "^1.6", "monicahq/laravel-sabre": "^1.6", @@ -104,6 +105,7 @@ "autoload": { "psr-4": { "App\\": "app/", + "Modules\\": "modules/", "Plugins\\": "plugins/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" @@ -111,6 +113,7 @@ }, "autoload-dev": { "psr-4": { + "Modules\\Dashboard\\Tests\\": "modules/dashboard/tests/", "Tests\\": "tests/", "Zoomyboy\\LaravelNami\\Tests\\": "packages/laravel-nami/tests/" } diff --git a/composer.lock b/composer.lock index fd32a2f0..19ea6985 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "10f0b0d2a8dee4a8dad4821de9935f85", + "content-hash": "67ae3a3987355f098ee6f850c6f8e846", "packages": [ { "name": "amphp/amp", @@ -5153,6 +5153,82 @@ ], "time": "2024-03-23T07:42:40+00:00" }, + { + "name": "livewire/livewire", + "version": "v3.5.8", + "source": { + "type": "git", + "url": "https://github.com/livewire/livewire.git", + "reference": "ce1ce71b39a3492b98f7d2f2a4583f1b163fe6ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/livewire/livewire/zipball/ce1ce71b39a3492b98f7d2f2a4583f1b163fe6ae", + "reference": "ce1ce71b39a3492b98f7d2f2a4583f1b163fe6ae", + "shasum": "" + }, + "require": { + "illuminate/database": "^10.0|^11.0", + "illuminate/routing": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "illuminate/validation": "^10.0|^11.0", + "laravel/prompts": "^0.1.24", + "league/mime-type-detection": "^1.9", + "php": "^8.1", + "symfony/console": "^6.0|^7.0", + "symfony/http-kernel": "^6.2|^7.0" + }, + "require-dev": { + "calebporzio/sushi": "^2.1", + "laravel/framework": "^10.15.0|^11.0", + "mockery/mockery": "^1.3.1", + "orchestra/testbench": "^8.21.0|^9.0", + "orchestra/testbench-dusk": "^8.24|^9.1", + "phpunit/phpunit": "^10.4", + "psy/psysh": "^0.11.22|^0.12" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Livewire\\LivewireServiceProvider" + ], + "aliases": { + "Livewire": "Livewire\\Livewire" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Caleb Porzio", + "email": "calebporzio@gmail.com" + } + ], + "description": "A front-end framework for Laravel.", + "support": { + "issues": "https://github.com/livewire/livewire/issues", + "source": "https://github.com/livewire/livewire/tree/v3.5.8" + }, + "funding": [ + { + "url": "https://github.com/livewire", + "type": "github" + } + ], + "time": "2024-09-20T19:41:19+00:00" + }, { "name": "lorisleiva/laravel-actions", "version": "v2.8.4", diff --git a/config/app.php b/config/app.php index 5f2a4bbd..5c0062f1 100644 --- a/config/app.php +++ b/config/app.php @@ -176,7 +176,7 @@ return [ App\Tex\TexServiceProvider::class, App\Dav\ServiceProvider::class, App\Setting\SettingServiceProvider::class, - App\Dashboard\DashboardServiceProvider::class, + Modules\Dashboard\DashboardServiceProvider::class, App\Providers\PluginServiceProvider::class, ], diff --git a/config/livewire.php b/config/livewire.php new file mode 100644 index 00000000..e764241e --- /dev/null +++ b/config/livewire.php @@ -0,0 +1,160 @@ + 'App\\View', + + /* + |--------------------------------------------------------------------------- + | View Path + |--------------------------------------------------------------------------- + | + | This value is used to specify where Livewire component Blade templates are + | stored when running file creation commands like `artisan make:livewire`. + | It is also used if you choose to omit a component's render() method. + | + */ + + 'view_path' => resource_path('views/livewire'), + + /* + |--------------------------------------------------------------------------- + | Layout + |--------------------------------------------------------------------------- + | The view that will be used as the layout when rendering a single component + | as an entire page via `Route::get('/post/create', CreatePost::class);`. + | In this case, the view returned by CreatePost will render into $slot. + | + */ + + 'layout' => 'components.layouts.app', + + /* + |--------------------------------------------------------------------------- + | Lazy Loading Placeholder + |--------------------------------------------------------------------------- + | Livewire allows you to lazy load components that would otherwise slow down + | the initial page load. Every component can have a custom placeholder or + | you can define the default placeholder view for all components below. + | + */ + + 'lazy_placeholder' => null, + + /* + |--------------------------------------------------------------------------- + | Temporary File Uploads + |--------------------------------------------------------------------------- + | + | Livewire handles file uploads by storing uploads in a temporary directory + | before the file is stored permanently. All file uploads are directed to + | a global endpoint for temporary storage. You may configure this below: + | + */ + + 'temporary_file_upload' => [ + 'disk' => null, // Example: 'local', 's3' | Default: 'default' + 'rules' => null, // Example: ['file', 'mimes:png,jpg'] | Default: ['required', 'file', 'max:12288'] (12MB) + 'directory' => null, // Example: 'tmp' | Default: 'livewire-tmp' + 'middleware' => null, // Example: 'throttle:5,1' | Default: 'throttle:60,1' + 'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs... + 'png', 'gif', 'bmp', 'svg', 'wav', 'mp4', + 'mov', 'avi', 'wmv', 'mp3', 'm4a', + 'jpg', 'jpeg', 'mpga', 'webp', 'wma', + ], + 'max_upload_time' => 5, // Max duration (in minutes) before an upload is invalidated... + 'cleanup' => true, // Should cleanup temporary uploads older than 24 hrs... + ], + + /* + |--------------------------------------------------------------------------- + | Render On Redirect + |--------------------------------------------------------------------------- + | + | This value determines if Livewire will run a component's `render()` method + | after a redirect has been triggered using something like `redirect(...)` + | Setting this to true will render the view once more before redirecting + | + */ + + 'render_on_redirect' => false, + + /* + |--------------------------------------------------------------------------- + | Eloquent Model Binding + |--------------------------------------------------------------------------- + | + | Previous versions of Livewire supported binding directly to eloquent model + | properties using wire:model by default. However, this behavior has been + | deemed too "magical" and has therefore been put under a feature flag. + | + */ + + 'legacy_model_binding' => false, + + /* + |--------------------------------------------------------------------------- + | Auto-inject Frontend Assets + |--------------------------------------------------------------------------- + | + | By default, Livewire automatically injects its JavaScript and CSS into the + | and of pages containing Livewire components. By disabling + | this behavior, you need to use @livewireStyles and @livewireScripts. + | + */ + + 'inject_assets' => true, + + /* + |--------------------------------------------------------------------------- + | Navigate (SPA mode) + |--------------------------------------------------------------------------- + | + | By adding `wire:navigate` to links in your Livewire application, Livewire + | will prevent the default link handling and instead request those pages + | via AJAX, creating an SPA-like effect. Configure this behavior here. + | + */ + + 'navigate' => [ + 'show_progress_bar' => true, + 'progress_bar_color' => '#2299dd', + ], + + /* + |--------------------------------------------------------------------------- + | HTML Morph Markers + |--------------------------------------------------------------------------- + | + | Livewire intelligently "morphs" existing HTML into the newly rendered HTML + | after each update. To make this process more reliable, Livewire injects + | "markers" into the rendered Blade surrounding @if, @class & @foreach. + | + */ + + 'inject_morph_markers' => true, + + /* + |--------------------------------------------------------------------------- + | Pagination Theme + |--------------------------------------------------------------------------- + | + | When enabling Livewire's pagination feature by using the `WithPagination` + | trait, Livewire will use Tailwind templates to render pagination views + | on the page. If you want Bootstrap CSS, you can specify: "bootstrap" + | + */ + + 'pagination_theme' => 'tailwind', +]; diff --git a/modules/Dashboard/Block.php b/modules/Dashboard/Block.php new file mode 100644 index 00000000..3376e3f2 --- /dev/null +++ b/modules/Dashboard/Block.php @@ -0,0 +1,12 @@ +put('menu', 'dashboard'); + session()->put('title', 'Dashboard'); + + $this->blocks = $factory->load(); + } + + public function render(): string + { + return <<<'HTML' +
+ @foreach($this->blocks as $block) + + + + @endforeach +
+ HTML; + } +} diff --git a/app/Dashboard/DashboardFactory.php b/modules/Dashboard/DashboardFactory.php similarity index 76% rename from app/Dashboard/DashboardFactory.php rename to modules/Dashboard/DashboardFactory.php index 2a430fc1..69646c62 100644 --- a/app/Dashboard/DashboardFactory.php +++ b/modules/Dashboard/DashboardFactory.php @@ -1,8 +1,7 @@ + * @return array */ - public function render(): array + public function load(): array { - return collect($this->blocks)->map(fn ($block): array => app($block)->render())->toArray(); + return collect($this->blocks)->map(fn ($block) => app($block))->toArray(); } /** diff --git a/app/Dashboard/DashboardServiceProvider.php b/modules/Dashboard/DashboardServiceProvider.php similarity index 93% rename from app/Dashboard/DashboardServiceProvider.php rename to modules/Dashboard/DashboardServiceProvider.php index 3d573496..ad11554a 100644 --- a/app/Dashboard/DashboardServiceProvider.php +++ b/modules/Dashboard/DashboardServiceProvider.php @@ -1,6 +1,6 @@ + */ + public array $blocks = []; + + /** + * Create a new event instance. + */ + public function __construct() + { + // + } + + public function purge(): void + { + $this->blocks = []; + } + + /** + * @param class-string $block + */ + public function push(string $block): void + { + $this->blocks[] = $block; + } + + /** + * Get the channels the event should broadcast on. + * + * @return array + */ + public function broadcastOn(): array + { + return [ + new PrivateChannel('channel-name'), + ]; + } +} diff --git a/modules/Dashboard/tests/DashboardComponentTest.php b/modules/Dashboard/tests/DashboardComponentTest.php new file mode 100644 index 00000000..7fd7256d --- /dev/null +++ b/modules/Dashboard/tests/DashboardComponentTest.php @@ -0,0 +1,48 @@ +login()->loginNami(); + + app(DashboardFactory::class)->purge(); + app(DashboardFactory::class)->register(ExampleBlock::class); + + Livewire::test(DashboardComponent::class) + ->assertSee('ExampleTitle') + ->assertSee('Example Content'); +}); + +it('renders page successfully', function () { + $this->login()->loginNami(); + + $this->get('/')->assertOk()->assertSee('Dashboard'); +}); + +class ExampleBlock extends Block +{ + + public function title(): string + { + return 'ExampleTitle'; + } + + public function render(): string + { + return <<<'HTML' +
+ Example Content +
+ HTML; + } +} diff --git a/resources/js/views/dashboard/VIndex.vue b/resources/js/views/dashboard/VIndex.vue index a2d04977..a0d408b4 100644 --- a/resources/js/views/dashboard/VIndex.vue +++ b/resources/js/views/dashboard/VIndex.vue @@ -2,7 +2,7 @@
- +
diff --git a/resources/views/components/layouts/app.blade.php b/resources/views/components/layouts/app.blade.php new file mode 100644 index 00000000..4769b81e --- /dev/null +++ b/resources/views/components/layouts/app.blade.php @@ -0,0 +1,3 @@ + + {{ $slot }} + diff --git a/routes/web.php b/routes/web.php index 7996811b..d1450596 100644 --- a/routes/web.php +++ b/routes/web.php @@ -17,7 +17,7 @@ use App\Course\Actions\CourseIndexAction; use App\Course\Actions\CourseStoreAction; use App\Invoice\Actions\InvoiceStoreAction; use App\Course\Actions\CourseUpdateAction; -use App\Dashboard\Actions\IndexAction as DashboardIndexAction; +use Modules\Dashboard\Actions\IndexAction as DashboardIndexAction; use App\Efz\ShowEfzDocumentAction; use App\Fileshare\Actions\FileshareApiIndexAction; use App\Fileshare\Actions\FileshareStoreAction; @@ -78,13 +78,14 @@ use App\Membership\Actions\MembershipDestroyAction; use App\Membership\Actions\MembershipStoreAction; use App\Membership\Actions\MembershipUpdateAction; use App\Payment\SubscriptionController; +use Modules\Dashboard\Components\DashboardComponent; Route::group(['namespace' => 'App\\Http\\Controllers'], function (): void { Auth::routes(['register' => false]); }); Route::group(['middleware' => 'auth:web'], function (): void { - Route::get('/', DashboardIndexAction::class)->name('home'); + Route::get('/', DashboardComponent::class)->name('home'); Route::post('/nami/login-check', NamiLoginCheckAction::class)->name('nami.login-check'); Route::post('/nami/get-search-layer', NamiGetSearchLayerAction::class)->name('nami.get-search-layer'); Route::post('/nami/search', NamiSearchAction::class)->name('nami.search'); diff --git a/storage/pail/.gitignore b/storage/pail/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/storage/pail/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore