happykit / flags

⛳️ Feature Flags for Next.js
https://happykit.dev
MIT License
1.01k stars 11 forks source link

Feature Flag evaluation not working as expected #52

Open hect1c opened 1 year ago

hect1c commented 1 year ago

Hey,

I'm testing out Happykit Feature flags and ran into an issue or possibly I have a misunderstanding of how the feature flag evaluation works.

I have the following rules setup.

image

In my getServerSideProps I have the following code

    const { initialFlagState } = await getFlags({
      context,
      user: {
        // key: 'manager',
        key: '',
      },
    })

    console.log('initialFlagState', initialFlagState)

When I alternate between both key with manager and empty string it seems my feature flag key is always true. I'm assuming this is because my default when active is true is using variant 1 of true. But it says under Variant 1 option the following

This flag is currently active. It will respect individual user targeting and evaluate all rules. If none of these match, it will fall back to the value you configure here.

My understanding is that because of rule number 2 I set on the user where Key is not equal to the string I'm expecting then it will return variant 2 or false. Again this isn't working so not sure if I misunderstood how this should work, or I am doing something wrong.

Happy to create a reproduction if that helps but should be easy to replicate I think.

dferber90 commented 1 year ago

Hey, thanks for the super detailed report!

HappyKit currently accepts three forms of inputs:

You might be running into trouble as happykit doesn't expect an empty user key

hect1c commented 1 year ago

Hey thanks for the reply.

So I have tried with traits and same issue it always resolves to true.

    const { initialFlagState } = await getFlags({
      context,
      traits: [{
        // key: 'manager', // this should be true
        key: 'test', // this should be false
      }],
    })

    console.log('initialFlagState', initialFlagState)

screenshot of the rules image

screenshot of the initialFlagState output Screenshot 2023-05-18 at 11 37 04 am

dferber90 commented 1 year ago

Looks like the error is here:

    traits: [{
        // key: 'manager', // this should be true
        key: 'test', // this should be false
      }],

traits expects an object, but you are providing an array. Could you try with this?

    traits: {
        // key: 'manager', // this should be true
        key: 'test', // this should be false
      },