6
6
7
7
use Mautic \CoreBundle \Test \MauticMysqlTestCase ;
8
8
use Mautic \LeadBundle \Entity \Lead ;
9
+ use Mautic \LeadBundle \Entity \LeadField ;
9
10
use Mautic \LeadBundle \Entity \LeadList ;
10
11
use Mautic \LeadBundle \Entity \ListLead ;
12
+ use MauticPlugin \CustomObjectsBundle \CustomFieldType \CustomFieldTypeInterface ;
13
+ use MauticPlugin \CustomObjectsBundle \Entity \CustomField ;
11
14
use MauticPlugin \CustomObjectsBundle \Entity \CustomItem ;
12
15
use MauticPlugin \CustomObjectsBundle \Entity \CustomObject ;
16
+ use MauticPlugin \CustomObjectsBundle \Provider \CustomFieldTypeProvider ;
13
17
use Symfony \Component \HttpFoundation \Request ;
14
18
15
19
class FilterOperatorSubscriberTest extends MauticMysqlTestCase
16
20
{
17
21
public function testIfNewOperatorNotInCustomObjectsAddedinSegmentFilter ()
18
22
{
19
- // Create a segment
20
- $ segment = new LeadList ();
21
- $ segment ->setName ('Test Segment A ' );
22
- $ segment ->setPublicName ('Test Segment A ' );
23
- $ segment ->setAlias ('test-segment-a ' );
24
-
25
- $ this ->em ->persist ($ segment );
26
- $ this ->em ->flush ();
27
-
28
- $ crawler = $ this ->client ->request (Request::METHOD_GET , '/s/segments/edit/ ' .$ segment ->getId ());
29
-
23
+ $ crawler = $ this ->client ->request (Request::METHOD_GET , '/s/segments/new/ ' );
30
24
$ segment_filters = $ crawler ->filter ('#available_segment_filters ' )->html ();
31
-
32
25
$ this ->assertStringContainsString ('not in custom objects ' , $ segment_filters );
33
26
}
34
27
@@ -44,13 +37,7 @@ public function testIfProperContactsAreAddedinSegmentWithNotInCustomObjectsFilte
44
37
$ this ->em ->persist ($ contact2 );
45
38
46
39
// 2) create custom object "Email List" with "[email protected] " and "[email protected] " as items
47
- $ customObject = new CustomObject ();
48
- $ customObject ->setNameSingular ('Email List ' );
49
- $ customObject ->setNamePlural ('Emai List ' );
50
- $ customObject ->setAlias ('emails ' );
51
- $ customObject ->setType (CustomObject::TYPE_MASTER );
52
- $ this ->em ->persist ($ customObject );
53
-
40
+ $ customObject = $ this ->createCustomObject ('emails ' );
54
41
$ customItem1 = new CustomItem ($ customObject );
55
42
$ customItem1->
setName (
'[email protected] ' );
56
43
$ this ->em ->persist ($ customItem1 );
@@ -94,4 +81,65 @@ public function testIfProperContactsAreAddedinSegmentWithNotInCustomObjectsFilte
94
81
$ this ->assertSame ($ contact2 ->getLastname (), $ leads [0 ]->getLead ()->getLastname ());
95
82
$ this ->assertSame ($ contact2 ->getEmail (), $ leads [0 ]->getLead ()->getEmail ());
96
83
}
84
+
85
+ public function testCustomObjectSegmentFilterOperatorForDateField (): void
86
+ {
87
+ $ leadField = $ this ->createField ('date_field ' , 'date ' );
88
+
89
+ $ fieldTypeProvider = self ::$ container ->get ('custom_field.type.provider ' );
90
+ \assert ($ fieldTypeProvider instanceof CustomFieldTypeProvider);
91
+ $ objectType = $ fieldTypeProvider ->getType ('date ' );
92
+ $ dateField = $ this ->createCustomField ('co_date_field ' , $ objectType );
93
+
94
+ $ this ->createCustomObject ('obj ' , $ dateField );
95
+
96
+ $ this ->em ->flush ();
97
+ $ crawler = $ this ->client ->request (Request::METHOD_GET , '/s/segments/new/ ' );
98
+
99
+ $ coDateFilterOperators = $ crawler
100
+ ->filter ('#available_segment_filters option[id="available_custom_object_cmf_ ' .$ dateField ->getId ().'"] ' )
101
+ ->attr ('data-field-operators ' );
102
+
103
+ $ leadDateFilterOperators = $ crawler
104
+ ->filter ('#available_segment_filters option[id="available_lead_ ' .$ leadField ->getAlias ().'"] ' )
105
+ ->attr ('data-field-operators ' );
106
+
107
+ $ this ->assertSame ($ coDateFilterOperators , $ leadDateFilterOperators );
108
+ }
109
+
110
+ private function createField (string $ alias , string $ type ): LeadField
111
+ {
112
+ $ field = new LeadField ();
113
+ $ field ->setName ($ alias );
114
+ $ field ->setAlias ($ alias );
115
+ $ field ->setType ($ type );
116
+ $ this ->em ->persist ($ field );
117
+
118
+ return $ field ;
119
+ }
120
+
121
+ private function createCustomObject (string $ alias , ?CustomField $ dateField = null ): CustomObject
122
+ {
123
+ $ customObject = new CustomObject ();
124
+ $ customObject ->setNameSingular ($ alias );
125
+ $ customObject ->setNamePlural ($ alias .'s ' );
126
+ $ customObject ->setAlias ($ alias );
127
+ if ($ dateField ) {
128
+ $ customObject ->addCustomField ($ dateField );
129
+ }
130
+ $ this ->em ->persist ($ customObject );
131
+
132
+ return $ customObject ;
133
+ }
134
+
135
+ private function createCustomField (string $ alias , CustomFieldTypeInterface $ objectType ): CustomField
136
+ {
137
+ $ dateField = new CustomField ();
138
+ $ dateField ->setTypeObject ($ objectType );
139
+ $ dateField ->setType ($ objectType ->getKey ());
140
+ $ dateField ->setLabel ($ alias );
141
+ $ dateField ->setAlias ($ alias );
142
+
143
+ return $ dateField ;
144
+ }
97
145
}
0 commit comments