public IEnumerator ActivateWithParametersTest()
        {
            // Given a valid confetti machine with particle systems and some valid positive parameters,
            GameObject      machineObject   = Object.Instantiate(Resources.Load <GameObject>(pathToDefaultPrefab));
            ConfettiMachine confettiMachine = machineObject.GetComponent <ConfettiMachine>();

            float newDuration = 22.5f;
            float newRadius   = 9.75f;

            ParticleSystem[] particleSystems = machineObject.GetComponentsInChildren <ParticleSystem>(true);
            Assert.IsTrue(particleSystems.Length > 0);

            float oldRate = particleSystems[0].emission.rateOverTimeMultiplier;

            // When I call Activate with parameters on it,
            confettiMachine.Activate(newRadius, newDuration);

            // Then the confetti machine is active and all of its particle systems are active and playing with the new given parameters.
            Assert.IsTrue(confettiMachine.IsActive);

            foreach (ParticleSystem particleSystem in particleSystems)
            {
                Assert.IsTrue(particleSystem.isPlaying);
                Assert.IsTrue(Math.Abs(particleSystem.shape.radius - newRadius) < 0.001f);
                Assert.IsTrue(Math.Abs(particleSystem.main.duration - newDuration) < 0.001f);
            }

            Assert.IsTrue(Math.Abs(particleSystems[0].emission.rateOverTimeMultiplier - (oldRate * newRadius * newRadius)) < 0.001f);

            yield break;
        }
        public IEnumerator DeactivateWhenActiveTest()
        {
            // Given an active valid confetti machine,
            GameObject      machineObject   = Object.Instantiate(Resources.Load <GameObject>(pathToDefaultPrefab));
            ConfettiMachine confettiMachine = machineObject.GetComponent <ConfettiMachine>();

            confettiMachine.Activate();

            ParticleSystem[] particleSystems = machineObject.GetComponentsInChildren <ParticleSystem>();
            Assert.IsTrue(particleSystems.Length > 0);

            // When I deactivate it,
            confettiMachine.Deactivate();

            // Then the confetti machine is not active and all of its particle systems are deactivated and not playing.
            Assert.IsFalse(confettiMachine.IsActive);

            foreach (ParticleSystem particleSystem in particleSystems)
            {
                Assert.IsFalse(particleSystem.isPlaying);
                Assert.IsFalse(particleSystem.gameObject.activeSelf);
            }

            yield break;
        }
        public IEnumerator ActivateWithoutParametersTest()
        {
            // Given a valid confetti machine,
            GameObject      machineObject   = Object.Instantiate(Resources.Load <GameObject>(pathToDefaultPrefab));
            ConfettiMachine confettiMachine = machineObject.GetComponent <ConfettiMachine>();

            // When I call Activate without parameters on it,
            confettiMachine.Activate();

            // Then the confetti machine is active and all of its particle systems are active and playing.
            Assert.IsTrue(confettiMachine.IsActive);

            ParticleSystem[] particleSystems = machineObject.GetComponentsInChildren <ParticleSystem>();
            Assert.IsTrue(particleSystems.Length > 0);

            foreach (ParticleSystem particleSystem in particleSystems)
            {
                Assert.IsTrue(particleSystem.isPlaying);
            }

            yield break;
        }