Skip to content

Commit

Permalink
Moved the FakeLogger out to TestLoggerService so other classes can us…
Browse files Browse the repository at this point in the history
…e it
  • Loading branch information
rob-baillie-ortoo committed Apr 7, 2022
1 parent ab5112f commit 276ee44
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 88 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
@isTest
private without sharing class LoggerServiceTest
{
private class TestException extends Exception {}

@isTest
private static void log_whenGivenALevelAndAMessageAndLoggingIsEnabledForThatLevel_callsToLog() // NOPMD: Test method name format
{
LoggerService.Level level = LoggerService.Level.INFO;
String message = 'the message';

FakeLogger fakeLogger = new FakeLogger();
TestLoggerService fakeLogger = new TestLoggerService();
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c( Name = 'Name', Log_INFO_Level_Messages__c = true );
Expand All @@ -26,7 +28,7 @@ private without sharing class LoggerServiceTest
LoggerService.Level level = LoggerService.Level.INFO;
String message = 'the message';

FakeLogger fakeLogger = new FakeLogger();
TestLoggerService fakeLogger = new TestLoggerService();
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c( Name = 'Name', Log_INFO_Level_Messages__c = false );
Expand All @@ -44,7 +46,7 @@ private without sharing class LoggerServiceTest
LoggerService.Level level = LoggerService.Level.INFO;
String message = 'the message';

FakeLogger fakeLogger = new FakeLogger().setDefaultLoggingEnabledReturns( true );
TestLoggerService fakeLogger = new TestLoggerService().setDefaultLoggingEnabledReturns( true );
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c(); // nameless config means there's no config
Expand All @@ -65,7 +67,7 @@ private without sharing class LoggerServiceTest
LoggerService.Level level = LoggerService.Level.INFO;
String message = 'the message';

FakeLogger fakeLogger = new FakeLogger().loggingThrowsException();
TestLoggerService fakeLogger = new TestLoggerService().loggingThrowsException();
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c( Name = 'Name', Log_INFO_Level_Messages__c = true );
Expand All @@ -84,7 +86,7 @@ private without sharing class LoggerServiceTest
String message = 'the message';
Id relatedSobjectId = TestIdUtils.generateId( Contact.SobjectType );

FakeLogger fakeLogger = new FakeLogger();
TestLoggerService fakeLogger = new TestLoggerService();
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c( Name = 'Name', Log_WARN_Level_Messages__c = true );
Expand All @@ -104,7 +106,7 @@ private without sharing class LoggerServiceTest
String message = 'the message';
Id relatedSobjectId = TestIdUtils.generateId( Contact.SobjectType );

FakeLogger fakeLogger = new FakeLogger();
TestLoggerService fakeLogger = new TestLoggerService();
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c( Name = 'Name', Log_WARN_Level_Messages__c = false );
Expand All @@ -123,7 +125,7 @@ private without sharing class LoggerServiceTest
String message = 'the message';
Id relatedSobjectId = TestIdUtils.generateId( Contact.SobjectType );

FakeLogger fakeLogger = new FakeLogger().setDefaultLoggingEnabledReturns( true );
TestLoggerService fakeLogger = new TestLoggerService().setDefaultLoggingEnabledReturns( true );
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c(); // nameless config means there's no config
Expand All @@ -145,7 +147,7 @@ private without sharing class LoggerServiceTest
String message = 'the message';
Id relatedSobjectId = TestIdUtils.generateId( Contact.SobjectType );

FakeLogger fakeLogger = new FakeLogger().loggingThrowsException();
TestLoggerService fakeLogger = new TestLoggerService().loggingThrowsException();
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c( Name = 'Name', Log_WARN_Level_Messages__c = true );
Expand All @@ -160,9 +162,9 @@ private without sharing class LoggerServiceTest
@isTest
private static void log_whenGivenExceptionAndLoggingIsEnabledForThatLevel_callsToLog() // NOPMD: Test method name format
{
Exception exceptionToLog = new LocalException( 'message' );
Exception exceptionToLog = new TestException( 'message' );

FakeLogger fakeLogger = new FakeLogger();
TestLoggerService fakeLogger = new TestLoggerService();
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c( Name = 'Name', Log_ERROR_Level_Messages__c = true );
Expand All @@ -177,9 +179,9 @@ private without sharing class LoggerServiceTest
@isTest
private static void log_whenGivenExceptionAndLoggingIsDisabledForErrors_doesNotCallToLog() // NOPMD: Test method name format
{
Exception exceptionToLog = new LocalException( 'message' );
Exception exceptionToLog = new TestException( 'message' );

FakeLogger fakeLogger = new FakeLogger();
TestLoggerService fakeLogger = new TestLoggerService();
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c( Name = 'Name', Log_ERROR_Level_Messages__c = false );
Expand All @@ -194,9 +196,9 @@ private without sharing class LoggerServiceTest
@isTest
private static void log_whenGivenExceptionAndLoggingAndNoConfig_asksServiceIfItShouldLog() // NOPMD: Test method name format
{
Exception exceptionToLog = new LocalException( 'message' );
Exception exceptionToLog = new TestException( 'message' );

FakeLogger fakeLogger = new FakeLogger().setDefaultLoggingEnabledReturns( true );
TestLoggerService fakeLogger = new TestLoggerService().setDefaultLoggingEnabledReturns( true );
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c(); // nameless config means there's no config
Expand All @@ -214,9 +216,9 @@ private without sharing class LoggerServiceTest
@isTest
private static void log_whenGivenExceptionAndLoggerThrowsException_doesNotThrow() // NOPMD: Test method name format
{
Exception exceptionToLog = new LocalException( 'message' );
Exception exceptionToLog = new TestException( 'message' );

FakeLogger fakeLogger = new FakeLogger().loggingThrowsException();
TestLoggerService fakeLogger = new TestLoggerService().loggingThrowsException();
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c( Name = 'Name', Log_ERROR_Level_Messages__c = true );
Expand All @@ -231,10 +233,10 @@ private without sharing class LoggerServiceTest
@isTest
private static void log_whenGivenExceptionAndIdAndLoggingIsEnabledForThatLevel_callsToLog() // NOPMD: Test method name format
{
Exception exceptionToLog = new LocalException( 'message' );
Exception exceptionToLog = new TestException( 'message' );
Id relatedSobjectId = TestIdUtils.generateId( Contact.SobjectType );

FakeLogger fakeLogger = new FakeLogger();
TestLoggerService fakeLogger = new TestLoggerService();
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c( Name = 'Name', Log_ERROR_Level_Messages__c = true );
Expand All @@ -249,10 +251,10 @@ private without sharing class LoggerServiceTest
@isTest
private static void log_whenGivenExceptionAndIdAndLoggingIsDisabledForErrors_doesNotCallToLog() // NOPMD: Test method name format
{
Exception exceptionToLog = new LocalException( 'message' );
Exception exceptionToLog = new TestException( 'message' );
Id relatedSobjectId = TestIdUtils.generateId( Contact.SobjectType );

FakeLogger fakeLogger = new FakeLogger();
TestLoggerService fakeLogger = new TestLoggerService();
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c( Name = 'Name', Log_ERROR_Level_Messages__c = false );
Expand All @@ -267,10 +269,10 @@ private without sharing class LoggerServiceTest
@isTest
private static void log_whenGivenExceptionAndIdAndLoggingAndNoConfig_asksServiceIfItShouldLog() // NOPMD: Test method name format
{
Exception exceptionToLog = new LocalException( 'message' );
Exception exceptionToLog = new TestException( 'message' );
Id relatedSobjectId = TestIdUtils.generateId( Contact.SobjectType );

FakeLogger fakeLogger = new FakeLogger().setDefaultLoggingEnabledReturns( true );
TestLoggerService fakeLogger = new TestLoggerService().setDefaultLoggingEnabledReturns( true );
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c(); // nameless config means there's no config
Expand All @@ -288,10 +290,10 @@ private without sharing class LoggerServiceTest
@isTest
private static void log_whenGivenExceptionAndIdAndLoggerThrowsException_doesNotThrow() // NOPMD: Test method name format
{
Exception exceptionToLog = new LocalException( 'message' );
Exception exceptionToLog = new TestException( 'message' );
Id relatedSobjectId = TestIdUtils.generateId( Contact.SobjectType );

FakeLogger fakeLogger = new FakeLogger().loggingThrowsException();
TestLoggerService fakeLogger = new TestLoggerService().loggingThrowsException();
Application.SERVICE.setMock( ILoggerService.class, fakeLogger );

LoggerService.config = new Logging_Configuration__c( Name = 'Name', Log_ERROR_Level_Messages__c = true );
Expand All @@ -315,68 +317,4 @@ private without sharing class LoggerServiceTest

System.assert( true, 'log, when the logger service implementation cannot be found, will use a null logger and no exception is thrown' );
}

class LocalException extends Exception {}
// This exists because StubProvider has difficulty creating a stub for ILoggerService
// Potentially it's a problem with overloaded methods defined in an interface.
class FakeLogger implements ILoggerService
{
public List<String> methods = new List<String>();
public List<List<Object>> parameters = new List<List<Object>>();
Boolean defaultLoggingEnabledReturns = false;
Boolean loggingThrowsException = false;

public FakeLogger loggingThrowsException()
{
loggingThrowsException = true;
return this;
}
public FakeLogger setDefaultLoggingEnabledReturns( Boolean returns )
{
defaultLoggingEnabledReturns = returns;
return this;
}
public Boolean getDefaultLoggingEnabled( LoggerService.Level logLevel )
{
methods.add( 'getDefaultLoggingEnabled' );
parameters.add( new List<Object>{ logLevel } );
return defaultLoggingEnabledReturns;
}
public void log( LoggerService.Level logLevel, String message )
{
methods.add( 'log' );
parameters.add( new List<Object>{ logLevel, message } );
if ( loggingThrowsException )
{
throw new LocalException( 'a message' );
}
}
public void log( LoggerService.Level logLevel, String message, Id relatedSobjectId )
{
methods.add( 'log' );
parameters.add( new List<Object>{ logLevel, message, relatedSobjectId } );
if ( loggingThrowsException )
{
throw new LocalException( 'a message' );
}
}
public void log( Exception exceptionToLog )
{
methods.add( 'log' );
parameters.add( new List<Object>{ exceptionToLog } );
if ( loggingThrowsException )
{
throw new LocalException( 'a message' );
}
}
public void log( Exception exceptionToLog, Id relatedSobject )
{
methods.add( 'log' );
parameters.add( new List<Object>{ exceptionToLog, relatedSobject });
if ( loggingThrowsException )
{
throw new LocalException( 'a message' );
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
@isTest
// This exists because StubProvider has difficulty creating a stub for ILoggerService
// Potentially it's a problem with overloaded methods defined in an interface.
public class TestLoggerService implements ILoggerService
{
class LoggerException extends Exception {}

public List<String> methods = new List<String>();
public List<List<Object>> parameters = new List<List<Object>>();
Boolean defaultLoggingEnabledReturns = false;
Boolean loggingThrowsException = false;

public TestLoggerService loggingThrowsException()
{
loggingThrowsException = true;
return this;
}
public TestLoggerService setDefaultLoggingEnabledReturns( Boolean returns )
{
defaultLoggingEnabledReturns = returns;
return this;
}
public Boolean getDefaultLoggingEnabled( LoggerService.Level logLevel )
{
methods.add( 'getDefaultLoggingEnabled' );
parameters.add( new List<Object>{ logLevel } );
return defaultLoggingEnabledReturns;
}
public void log( LoggerService.Level logLevel, String message )
{
methods.add( 'log' );
parameters.add( new List<Object>{ logLevel, message } );
if ( loggingThrowsException )
{
throw new LoggerException( 'a message' );
}
}
public void log( LoggerService.Level logLevel, String message, Id relatedSobjectId )
{
methods.add( 'log' );
parameters.add( new List<Object>{ logLevel, message, relatedSobjectId } );
if ( loggingThrowsException )
{
throw new LoggerException( 'a message' );
}
}
public void log( Exception exceptionToLog )
{
methods.add( 'log' );
parameters.add( new List<Object>{ exceptionToLog } );
if ( loggingThrowsException )
{
throw new LoggerException( 'a message' );
}
}
public void log( Exception exceptionToLog, Id relatedSobject )
{
methods.add( 'log' );
parameters.add( new List<Object>{ exceptionToLog, relatedSobject });
if ( loggingThrowsException )
{
throw new LoggerException( 'a message' );
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>54.0</apiVersion>
<status>Active</status>
</ApexClass>

0 comments on commit 276ee44

Please sign in to comment.