Skip to content

Instantly share code, notes, and snippets.

View FagnerMartinsBrack's full-sized avatar
🎯
Focusing

Fagner Brack FagnerMartinsBrack

🎯
Focusing
View GitHub Profile
@FagnerMartinsBrack
FagnerMartinsBrack / CodeForEvolvableAPIUsingCLI.js
Last active February 5, 2019 10:34
(Medium) - Evolvable APIs
// The brains to fill the fields. This uses the human brain of the user.
const usingCLI = (fields) => {
const fieldsWithValuesFromUser = await presentFieldNamesToUser(Object.keys(fields));
return fieldsWithValuesFromUser;
};
// The client uses the CLI to get the field values when the server asks for it
const runWithFieldsFromCLI = run(usingCLI);
// Initial trigger of the booking process
@FagnerMartinsBrack
FagnerMartinsBrack / ClientCodeForEvolvableAPI.js
Last active April 14, 2019 04:09
(Medium) - Evolvable APIs
// The brains to fill the fields. This can use AI, etc.
const fillFields = (fields) => fields;
const run = async (method = 'GET', url = 'https://clinic.example.com/start-booking', fields) => {
const response = await fetch(url, { method: method, body: JSON.stringify(fields) });
const parsedResponseBody = await response.json();
const requiredFieldsAction = queryAction('required-fields', parsedResponseBody);
if (requiredFieldsAction) {
@FagnerMartinsBrack
FagnerMartinsBrack / EvolvableAPIForAppointmentSystem.json
Last active February 13, 2019 22:03
(Medium) - Evolvable APIs
// Response for:
// GET /start-booking
{
"data": [{
"type": "action",
"id": "required-fields",
"attributes": {
"url": "/start-booking",
"method": "post",
@FagnerMartinsBrack
FagnerMartinsBrack / SecondRequirementTraditionalWay.js
Last active February 3, 2019 03:01
(Medium) - Evolvable APIs
const response = await fetch('http://clinic.example.com/booking?intendedDoctor=jane', {
method: 'get'
});
const availableTimeSlotsForTheWeek = await response.json();
await fetch('http://clinic.example.com/booking', {
method: 'post',
body: JSON.stringify({
username: 'mary.doe',
@FagnerMartinsBrack
FagnerMartinsBrack / CreateBookingTraditionalWay.js
Last active February 3, 2019 02:57
(Medium) - Evolvable APIs
await fetch('http://clinic.example.com/booking', {
method: 'post',
body: JSON.stringify({
username: 'mary.doe',
dateTime: '2018-05-01T10:20:00Z'
intendedDoctor: 'jane',
booking: 'Consultation with Doctor Jane'
}),
});
@FagnerMartinsBrack
FagnerMartinsBrack / ExampleImportCoupling.js
Created December 17, 2018 10:44
(Medium) - The Myth Of 100% Code Coverage
const prefill = Prefill(StubbedProvider())(MappingLogic(forSimpleMatching));
const prefilledFormFields = prefill(FormFields());
expect(prefilledFormFields.toString()).toEqual('name: Anna');
@FagnerMartinsBrack
FagnerMartinsBrack / ExampleIsolateSideEffects.js
Created December 17, 2018 10:43
(Medium) - The Myth Of 100% Code Coverage
const httpServerDataSource = HttpServerDataSource(getRequest);
const postsTitle = await httpServerDataSource.findPostsTitle();
assert.deepEqual(postsTitle, ['How to bake a cake']);
@FagnerMartinsBrack
FagnerMartinsBrack / ReactTestRenderedComponent.js
Created December 17, 2018 10:41
(Medium) - The Myth Of 100% Code Coverage
const renderedComponent = render(<Counter></Counter>);
renderedComponent.querySelector('.count-button').click();
renderedComponent.querySelector('.count-button').click();
const renderedCount = renderedComponent
.querySelector('.current-count')
.innerHTML;
expect(renderedCount).toEqual('2');
@FagnerMartinsBrack
FagnerMartinsBrack / ReactTestingInternalsComponent.js
Created December 17, 2018 10:40
(Medium) - The Myth Of 100% Code Coverage
const instance = render(<Counter></Counter>).getInstance();
instance.increment();
instance.increment();
expect(instance.getState()).toEqual({ count: 2 });
@FagnerMartinsBrack
FagnerMartinsBrack / FinalCode.js
Created November 22, 2018 10:45
(Medium) - How TDD Can Prevent Over-Engineering
const interestToPayFor = (loanAmount) => {
const greaterThan2000 = { endOfRange: Money('$2000.00'), interestPerDollar: Money('$0.09'), previousInterestPerDollar: Money('$0.00') };
const greaterThan5000 = { endOfRange: Money('$5000.00'), interestPerDollar: Money('$0.14'), previousInterestPerDollar: Money('$0.09') };
const greaterThan10000 = { endOfRange: Money('$10000.00'), interestPerDollar: Money('$0.21'), previousInterestPerDollar: Money('$0.14') };
// You can move this into a configuration file so that changes
// in the behavior doesn't require code changes
const ranges = [greaterThan2000, greaterThan5000, greaterThan10000];
let interestAmount = Money('$0.00');
for (range of ranges) {
if (loanAmount.greaterThan(range.endOfRange)) {