Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
| 1 | <?php |
||
| 37 | class DevLogDebugWriterTest extends UnitTest |
||
| 38 | { |
||
| 39 | |||
| 40 | /** |
||
| 41 | * @test |
||
| 42 | */ |
||
| 43 | public function testDebugMessageIsWrittenForMessageFromSolr() |
||
| 44 | { |
||
| 45 | /** @var $logWriter DevLogDebugWriter */ |
||
| 46 | $logWriter = $this->getMockBuilder(DevLogDebugWriter::class)->setMethods(['getIsAllowedByDevIPMask', 'getIsDevLogDebugOutputEnabled', 'writeDebugMessage'])->getMock(); |
||
| 47 | $logWriter->expects($this->any())->method('getIsAllowedByDevIPMask')->will($this->returnValue(true)); |
||
| 48 | $logWriter->expects($this->any())->method('getIsDevLogDebugOutputEnabled')->will($this->returnValue(true)); |
||
| 49 | |||
| 50 | //we have a matching devIpMask and the debugOutput of log messages is enabled => debug should be written |
||
| 51 | $logWriter->expects($this->once())->method('writeDebugMessage'); |
||
| 52 | $logWriter->log(['extKey' => 'solr', 'message' => 'test']); |
||
| 53 | } |
||
| 54 | |||
| 55 | /** |
||
| 56 | * @test |
||
| 57 | */ |
||
| 58 | public function testDebugMessageIsNotWrittenForOtherExtensions() |
||
| 59 | { |
||
| 60 | /** @var $logWriter DevLogDebugWriter */ |
||
| 61 | $logWriter = $this->getMockBuilder(DevLogDebugWriter::class)->setMethods(['getIsAllowedByDevIPMask', 'getIsDevLogDebugOutputEnabled', 'writeDebugMessage'])->getMock(); |
||
| 62 | $logWriter->expects($this->any())->method('getIsAllowedByDevIPMask')->will($this->returnValue(true)); |
||
| 63 | $logWriter->expects($this->any())->method('getIsDevLogDebugOutputEnabled')->will($this->returnValue(true)); |
||
| 64 | |||
| 65 | //we have a matching devIpMask and the debugOutput of log messages is enabled => debug should be written |
||
| 66 | $logWriter->expects($this->never())->method('writeDebugMessage'); |
||
| 67 | $logWriter->log(['extKey' => 'news', 'message' => 'test']); |
||
| 68 | } |
||
| 69 | |||
| 70 | /** |
||
| 71 | * @test |
||
| 72 | */ |
||
| 73 | public function testDebugMessageIsNotWrittenWhenDevIpMaskIsNotMatching() |
||
| 74 | { |
||
| 75 | /** @var $logWriter DevLogDebugWriter */ |
||
| 76 | $logWriter = $this->getMockBuilder(DevLogDebugWriter::class)->setMethods(['getIsAllowedByDevIPMask', 'getIsDevLogDebugOutputEnabled', 'writeDebugMessage'])->getMock(); |
||
| 77 | $logWriter->expects($this->any())->method('getIsAllowedByDevIPMask')->will($this->returnValue(false)); |
||
| 78 | $logWriter->expects($this->any())->method('getIsDevLogDebugOutputEnabled')->will($this->returnValue(true)); |
||
| 79 | |||
| 80 | //we have a matching devIpMask and the debugOutput of log messages is enabled => debug should be written |
||
| 81 | $logWriter->expects($this->never())->method('writeDebugMessage'); |
||
| 82 | $logWriter->log(['extKey' => 'solr', 'message' => 'test']); |
||
| 83 | } |
||
| 84 | |||
| 85 | /** |
||
| 86 | * @test |
||
| 87 | */ |
||
| 88 | public function testDebugMessageIsNotWrittenWhenDebugOutputIsDisabled() |
||
| 89 | { |
||
| 90 | /** @var $logWriter DevLogDebugWriter */ |
||
| 91 | $logWriter = $this->getMockBuilder(DevLogDebugWriter::class)->setMethods(['getIsAllowedByDevIPMask', 'getIsDevLogDebugOutputEnabled', 'writeDebugMessage'])->getMock(); |
||
| 92 | $logWriter->expects($this->any())->method('getIsAllowedByDevIPMask')->will($this->returnValue(true)); |
||
| 93 | $logWriter->expects($this->any())->method('getIsDevLogDebugOutputEnabled')->will($this->returnValue(false)); |
||
| 94 | |||
| 95 | //we have a matching devIpMask and the debugOutput of log messages is enabled => debug should be written |
||
| 96 | $logWriter->expects($this->never())->method('writeDebugMessage'); |
||
| 97 | $logWriter->log(['extKey' => 'solr', 'message' => 'test']); |
||
| 98 | } |
||
| 99 | } |
||
| 100 |