Telescope: Small Bug becomes a Feature? (3/3)
Tags: opensource, javascript, testing, github
Published: 2020-12-12 00:24:34

## Intro
The last blog I wrote was about the small bug I was fixing. This blog is about how that small bug fix turned into a feature with testing implemented. The function I wrote to solve one problem can now solve the root problem anywhere that needs to have a proper host and port URL. The [issue](https://github.com/Seneca-CDOT/telescope/pull/1443) I fixed it with the small fix mentioned in the last blog. ![](https://media.discordapp.net/attachments/153626925200441344/787104710846709770/unknown.png?width=1440&height=55) 

## What I added
But, Like we talked about in the last post this would not fix the root issue. So, Implement a parse function module.
```
// parsesUrl to make sure there is only a single port
const parseUrl = (url, port) => {
  try {
    const urlObj = new URL(url);
    urlObj.port = port;
    return urlObj.href;
  } catch (e) {
    return null;
  }
};

module.exports = parseUrl;
``` 
This one is also much more simple than the function in the last post.
```
const parseUrl = (url, port) => {
  let result;
  try {
    const urlObj = new URL(url);
    urlObj.port = port;
    if (urlObj.port !== '') {
      result = urlObj.href;
    }
  } catch (e) {
    result = null;
 }
return result;
}
```
So, I learned that the IF statement is useless because if there is a double port I can just replace it with its self. If, there is no valid port we get an error that is caught and we return a null value. So, the new function only return either a valid URL or null.

I also added testing for the following scenarios

+ URL with port and valid port
+ URL is invalid
+ port is undefined
+ port is null
+ port is a number
+ port is a string
+ port is an invalid string
+ port is a number outside the port range (e.g., 65535 + 1)

## Testing Reflection
I also learned from code review that the tests I write should be more isolated instead of me using higher scope variables I should encapsulate each test with its own testing variables. But, it was okay with this one because I made sure all my testing variables were immutable.

With this [contribution](https://github.com/Seneca-CDOT/telescope/pull/1443) I also update all legacy URL library use to instead use the current URL class. I also made sure that all code that was using an environmental variable to create a host+port URL used my new utility function.

More info on everything added/changed can be found [here](https://github.com/Seneca-CDOT/telescope/pull/1443/files).

## Contribution Reflection 
With this contribution I got a greater understanding of NodeJS's URL library, testing with jest and going through the process of code reviews. Even though the bug was a simple fix it allowed me to get to the bottom of the real issue now if the function is used properly this type of bug will not happen as we fixed the real issue. So, we now do not care how someone has there environment variables setup with a port or without a port this fixes that issue.

## What's next?
For telescope, I am still assigned on a issue to route all our logs to Kibana. This issue is taking a while to do because it requires a lot more research. I have tried to use a couple of solutions like filebeat to route the logs but this will probably take me a while to understand. The other thing I need to also make it work in dev and prod which will require greater knowledge of docker which I am still lacking but this issue is something I want to figure out and will try my best to solve it.

 I am also working on trying to contribute to larger repos I have a current [ask](https://github.com/electron/electron/issues/26862) on the electron repo.