def test_not_dirty_by_default(nested_config):
    assert not nested_config.is_dirty()
    assert not nested_config['a'].is_dirty()


def test_set_parent(nested_config):
    nested_config.root.value += 1
    assert nested_config.is_dirty()

def test_set_child(nested_config):
    nested_config.root.a.value += 1
    assert nested_config.is_dirty()
    assert nested_config['a'].is_dirty()
    assert not nested_config['a2'].is_dirty()

def test_mark_clean(nested_config):
    nested_config.root.a.value += 1
    nested_config.mark_clean()
    test_not_dirty_by_default(nested_config)

from confetti import Config


def test_not_dirty_by_default(nested_config):
    assert not nested_config.is_dirty()
    assert not nested_config['a'].is_dirty()


def test_set_parent(nested_config):
    nested_config.root.value += 1
    assert nested_config.is_dirty()


def test_set_child(nested_config):
    nested_config.root.a.value += 1
    assert nested_config.is_dirty()
    assert nested_config['a'].is_dirty()
    assert not nested_config['a2'].is_dirty()


def test_mark_clean(nested_config):
    nested_config.root.a.value += 1
    nested_config.mark_clean()
    test_not_dirty_by_default(nested_config)


def test_extending_doesnt_count_as_dirty(nested_config):
    nested_config.extend(Config({
        'new_value': 2}))
    assert not nested_config.is_dirty()

Add test for extending not being marked as dirty
Add test for extending not being marked as dirty

+ from confetti import Config
+ 
+ 
  def test_not_dirty_by_default(nested_config):
      assert not nested_config.is_dirty()
      assert not nested_config['a'].is_dirty()
  
  
  def test_set_parent(nested_config):
      nested_config.root.value += 1
      assert nested_config.is_dirty()
  
+ 
  def test_set_child(nested_config):
      nested_config.root.a.value += 1
      assert nested_config.is_dirty()
      assert nested_config['a'].is_dirty()
      assert not nested_config['a2'].is_dirty()
  
+ 
  def test_mark_clean(nested_config):
      nested_config.root.a.value += 1
      nested_config.mark_clean()
      test_not_dirty_by_default(nested_config)
  
+ 
+ def test_extending_doesnt_count_as_dirty(nested_config):
+     nested_config.extend(Config({
+         'new_value': 2}))
+     assert not nested_config.is_dirty()
+ 
Add test for extending not being marked as dirty
## Code Before:
def test_not_dirty_by_default(nested_config):
    assert not nested_config.is_dirty()
    assert not nested_config['a'].is_dirty()


def test_set_parent(nested_config):
    nested_config.root.value += 1
    assert nested_config.is_dirty()

def test_set_child(nested_config):
    nested_config.root.a.value += 1
    assert nested_config.is_dirty()
    assert nested_config['a'].is_dirty()
    assert not nested_config['a2'].is_dirty()

def test_mark_clean(nested_config):
    nested_config.root.a.value += 1
    nested_config.mark_clean()
    test_not_dirty_by_default(nested_config)

## Instruction:
Add test for extending not being marked as dirty
## Code After:
from confetti import Config


def test_not_dirty_by_default(nested_config):
    assert not nested_config.is_dirty()
    assert not nested_config['a'].is_dirty()


def test_set_parent(nested_config):
    nested_config.root.value += 1
    assert nested_config.is_dirty()


def test_set_child(nested_config):
    nested_config.root.a.value += 1
    assert nested_config.is_dirty()
    assert nested_config['a'].is_dirty()
    assert not nested_config['a2'].is_dirty()


def test_mark_clean(nested_config):
    nested_config.root.a.value += 1
    nested_config.mark_clean()
    test_not_dirty_by_default(nested_config)


def test_extending_doesnt_count_as_dirty(nested_config):
    nested_config.extend(Config({
        'new_value': 2}))
    assert not nested_config.is_dirty()
