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 ;
17
+ use MauticPlugin \CustomObjectsBundle \Tests \ProjectVersionTrait ;
13
18
use Symfony \Component \HttpFoundation \Request ;
14
19
15
20
class FilterOperatorSubscriberTest extends MauticMysqlTestCase
16
21
{
22
+ use ProjectVersionTrait;
23
+
17
24
public function testIfNewOperatorNotInCustomObjectsAddedinSegmentFilter ()
18
25
{
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
-
26
+ $ crawler = $ this ->client ->request (Request::METHOD_GET , '/s/segments/new/ ' );
30
27
$ segment_filters = $ crawler ->filter ('#available_segment_filters ' )->html ();
31
-
32
28
$ this ->assertStringContainsString ('not in custom objects ' , $ segment_filters );
33
29
}
34
30
@@ -44,13 +40,7 @@ public function testIfProperContactsAreAddedinSegmentWithNotInCustomObjectsFilte
44
40
$ this ->em ->persist ($ contact2 );
45
41
46
42
// 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
-
43
+ $ customObject = $ this ->createCustomObject ('emails ' );
54
44
$ customItem1 = new CustomItem ($ customObject );
55
45
$ customItem1->
setName (
'[email protected] ' );
56
46
$ this ->em ->persist ($ customItem1 );
@@ -94,4 +84,69 @@ public function testIfProperContactsAreAddedinSegmentWithNotInCustomObjectsFilte
94
84
$ this ->assertSame ($ contact2 ->getLastname (), $ leads [0 ]->getLead ()->getLastname ());
95
85
$ this ->assertSame ($ contact2 ->getEmail (), $ leads [0 ]->getLead ()->getEmail ());
96
86
}
87
+
88
+ public function testCustomObjectSegmentFilterOperatorForDateField (): void
89
+ {
90
+ if (!$ this ->isCloudProject ()) {
91
+ $ this ->markTestSkipped ('As context is not available for segment only in 4.4 ' );
92
+ }
93
+
94
+ $ leadField = $ this ->createField ('date_field ' , 'date ' );
95
+
96
+ $ fieldTypeProvider = self ::$ container ->get ('custom_field.type.provider ' );
97
+ \assert ($ fieldTypeProvider instanceof CustomFieldTypeProvider);
98
+ $ objectType = $ fieldTypeProvider ->getType ('date ' );
99
+ $ dateField = $ this ->createCustomField ('co_date_field ' , $ objectType );
100
+
101
+ $ this ->createCustomObject ('obj ' , $ dateField );
102
+
103
+ $ this ->em ->flush ();
104
+ $ crawler = $ this ->client ->request (Request::METHOD_GET , '/s/segments/new/ ' );
105
+
106
+ $ coDateFilterOperators = $ crawler
107
+ ->filter ('#available_segment_filters option[id="available_custom_object_cmf_ ' .$ dateField ->getId ().'"] ' )
108
+ ->attr ('data-field-operators ' );
109
+
110
+ $ leadDateFilterOperators = $ crawler
111
+ ->filter ('#available_segment_filters option[id="available_lead_ ' .$ leadField ->getAlias ().'"] ' )
112
+ ->attr ('data-field-operators ' );
113
+
114
+ $ this ->assertSame ($ coDateFilterOperators , $ leadDateFilterOperators );
115
+ }
116
+
117
+ private function createField (string $ alias , string $ type ): LeadField
118
+ {
119
+ $ field = new LeadField ();
120
+ $ field ->setName ($ alias );
121
+ $ field ->setAlias ($ alias );
122
+ $ field ->setType ($ type );
123
+ $ this ->em ->persist ($ field );
124
+
125
+ return $ field ;
126
+ }
127
+
128
+ private function createCustomObject (string $ alias , ?CustomField $ dateField = null ): CustomObject
129
+ {
130
+ $ customObject = new CustomObject ();
131
+ $ customObject ->setNameSingular ($ alias );
132
+ $ customObject ->setNamePlural ($ alias .'s ' );
133
+ $ customObject ->setAlias ($ alias );
134
+ if ($ dateField ) {
135
+ $ customObject ->addCustomField ($ dateField );
136
+ }
137
+ $ this ->em ->persist ($ customObject );
138
+
139
+ return $ customObject ;
140
+ }
141
+
142
+ private function createCustomField (string $ alias , CustomFieldTypeInterface $ objectType ): CustomField
143
+ {
144
+ $ dateField = new CustomField ();
145
+ $ dateField ->setTypeObject ($ objectType );
146
+ $ dateField ->setType ($ objectType ->getKey ());
147
+ $ dateField ->setLabel ($ alias );
148
+ $ dateField ->setAlias ($ alias );
149
+
150
+ return $ dateField ;
151
+ }
97
152
}
0 commit comments