DAVFoundation / dav-js

Enable integration of JavaScript, TypeScript, and Node.js code with the DAV Network
https://developers.dav.network/
MIT License
75 stars 51 forks source link

Create tests for `vessel-charging/messages/VesselStatusMessageParams` using jest. #30

Closed haialaluf closed 5 years ago

haialaluf commented 5 years ago

first-timers-only

This issue is tagged :octocat: first-timers-only. It is only for people who have never contributed to open source before, and are looking for an easy way take their first steps.

Consider this your chance to dip your toe into the world of open-source, and get some bragging rights for writing code that makes drones fly, lets cars find charging stations, helps people and goods get from place to place, and more.

Find more first-timers-only issues from DAV Foundation here.

Thank you for your help :heart:

What is this project?

DAV (Decentralized Autonomous Vehicles) is a new foundation working to build an open-source infrastructure for autonomous vehicles (cars, drones, trucks, robots, and all the service providers around them) to communicate and transact with each other over blockchain.

As an organization that believes in building a large community of open-source contributors, we often create issues like this one to help people take their first few steps into the world of open source.

dav-js

This SDK enabled integrating any client side JS and NodeJS code with the DAV Network.

How you can help

The Issue

Create tests for vessel-charging/messages/VesselStatusMessageParams using jest.

You need to create tests to check that the serialize and deserialize methods work as expected.

Please use the test file for class NeedParams as a basis for your new code.

messageParams1.desrialize(messageParams2.serialize()) == messageParams2 must therefore always be true.

NOTE: Some names are changed between protocol string representation of instance properties:

Contributing to dav-js

Asking for help

We appreciate your effort in taking the time to work on this issue and help out the open source community and the foundation. If you need any help, feel free to ask below or in our gitter channel. We are always happy to help 😄

ericcgu commented 5 years ago

Hello team! My name is Eric. I am an experienced developer but have never contributed to open source. I would like to help if possible.

I reviewed the sample code (https://github.com/DAVFoundation/dav-js/blob/master/src/vessel-charging/NeedParams.test.ts).

The question I have is this:

Is there a specific reason for using Jest Matcher expect(object1).toEqual(object2)?

Typically, toEqual is too coupled with implementation for testing objects and makes for a brittle test. If we add n+1 properties to object1 class, we need to update the test. I feel that this will cause slowdowns in development because the assertion is too narrow, causing the test to be too brittle.

The idea I had was to use expect(object1).toMatch(object2) and including a few key properties, which may make for better faster testing, sans development slowdown and achieve the same benefit.

https://jestjs.io/docs/en/expect#tomatchobjectobject

TalAter commented 5 years ago

Thank you @ericcgu

That's a very good observation. I had to take some time to consider it, but I think I prefer the current implementation using toEqual()

The test for the serializer makes sure that a certain input always gives a certain predictable output. And both the expected input and output are present in the test code. If in the future we change how the serialization works (e.g., by adding not just ttl but also a ttl_expiry_logging_endpoint), the change should be reflected in the test.

Yes, it's a change that might happen in the parent NeedParams and then affect the vessel-charging NeedParams test, and so could be argued to be too coupled. But I like how the expected outcome of the function is explicitly stated here. Makes the test read like documentation.

Anyway, as I already said, that is an excellent observation. We would be honored to have your expertise and help you get started on your path to more involvement with open source. Open source has had a tremendous influence on my career (success and enjoyment)... it's a path worth taking.

ericcgu commented 5 years ago

Thank you @TalAter .

TalAter commented 5 years ago

@ericcgu I believe there is a bug in all the message files for vessel-charging which will cause you to not be able to complete this issue.

Would you be interested in tackling another one? Perhaps #22

This is for a decentralized ride hailing app we are currently building, it's a cool one.

ericcgu commented 5 years ago

Yes please.

TalAter commented 5 years ago

@ericcgu The bug has been resolved.

Would you like to try this issue now?

sark01 commented 5 years ago

@TalAter, Can I give this a go?

TalAter commented 5 years ago

@ericcgu Are you still interested in doing this issue?

ericcgu commented 5 years ago

I apologize. I don't have the bandwidth I thought I would. Feel free to takeover.

On Tue, Oct 9, 2018, 3:47 AM Tal Ater notifications@github.com wrote:

@ericcgu https://github.com/ericcgu Are you still interested in doing this issue?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/DAVFoundation/dav-js/issues/30#issuecomment-428094440, or mute the thread https://github.com/notifications/unsubscribe-auth/AEtvj4KM3rygPSHTvEZ0JrOfnunmf1tBks5ujFSrgaJpZM4WaZTo .

TalAter commented 5 years ago

@ericcgu No problem. We'll be here once you feel like getting involved again 👍

TalAter commented 5 years ago

@sark01 go ahead, it's all yours.

sark01 commented 5 years ago

@TalAter, thanks, I'm stuck up in a critical issue at work so I'll start working on it in a day or two if that's not an issue.

TalAter commented 5 years ago

👍 no problem