shouldReceive('isPublicProfileShowPhoto')->andReturn(true); $member->shouldReceive('isPublicProfileShowFullname')->andReturn(true); $metric = Mockery::mock(SummitEventAttendanceMetric::class); $metric->shouldReceive('hasMember')->andReturn(true); $metric->shouldReceive('getMember')->andReturn($member); $metric->shouldReceive('getIp')->andReturn('10.1.2.3'); $metric->shouldReceive('getBrowser')->andReturn('Firefox'); $metric->shouldReceive('getOrigin')->andReturn('https://example.org'); $metric->shouldReceive('getCreatedById')->andReturn(7); $metric->shouldReceive('getAttendeeId')->andReturn(5); $metric->shouldReceive('getMemberFirstName')->andReturn('Jane'); $metric->shouldReceive('getMemberLastName')->andReturn('Doe'); $metric->shouldReceive('getMemberProfilePhotoUrl')->andReturn('https://example.org/p.png'); $metric->shouldReceive('getType')->andReturn('EVENT'); $metric->shouldReceive('getEventId')->andReturn(1); $metric->shouldReceive('getRoomId')->andReturn(2); $metric->shouldReceive('getSubType')->andReturn('IN_PERSON'); $metric->shouldReceive('getOutgressDate')->andReturn(null); $metric->shouldReceive('getIngressDate')->andReturn(new \DateTime()); return $metric; } private function inner($decorator) { $prop = new \ReflectionProperty($decorator, 'serializer_imp'); $prop->setAccessible(true); return $prop->getValue($decorator); } public function testPublicSerializerOmitsSensitiveFields() { $values = (new PublicSummitEventAttendanceMetricSerializer( $this->buildMetric(), Mockery::mock(IResourceServerContext::class) ))->serialize(); foreach (['ip', 'browser', 'origin', 'created_by_id'] as $key) { $this->assertArrayNotHasKey($key, $values); } $this->assertArrayHasKey('member_first_name', $values); } public function testRegistryKeepsFullSerializerForPrivateAndSelectsPublicOneForAttendance() { $registry = SerializerRegistry::getInstance(); // the registry resolves by short class name, so it needs a real entity (not a mock) $metric = new SummitEventAttendanceMetric(); $this->assertInstanceOf( PublicSummitEventAttendanceMetricSerializer::class, $this->inner($registry->getSerializer($metric, SerializerRegistry::SerializerType_PublicAttendance)) ); $this->assertInstanceOf( SummitEventAttendanceMetricSerializer::class, $this->inner($registry->getSerializer($metric, SerializerRegistry::SerializerType_Private)) ); $this->assertInstanceOf( SummitEventAttendanceMetricSerializer::class, $this->inner($registry->getSerializer($metric)) ); } }